在CUDA中使用3D纹理时,为什么我们不需要设置纹理坐标?

时间:2012-04-12 08:50:53

标签: cuda textures

在OpenGL中,创建3D纹理后,我们总是需要绘制代理几何体(如GL_QUADS)以包含3D纹理并在此函数中设置纹理坐标:glTexCoord3f。

然而,当我在CUDA中使用3D纹理时,我从来没有找到像glTexCoord3f这样的函数来指出纹理坐标。实际上,我们只使用CUDA数组,然后将数组绑定到纹理。在此之后,我们可以使用纹理获取函数tex3D来获取值。

因此,我很困惑,即使我们从未在????之前设置纹理坐标,tex3D功能如何正确运行?

感谢您的回答。

1 个答案:

答案 0 :(得分:2)

纹理坐标是tex3D() fetch函数的输入参数。

更详细地说,在OpenGL中,当你调用glTexCoord3f()时,它指定下一个发布顶点的纹理坐标。渲染多边形的每个像素处的纹理坐标是从多边形顶点(通常是三角形)指定的纹理坐标进行插值。

在CUDA中,没有多边形的概念或坐标的插值。相反,每个线程负责计算(或加载)其纹理坐标并为每次获取明确指定它们。这是tex3D()的用武之地。

请注意,如果使用GLSL像素着色器在OpenGL中对多边形进行着色,实际上您可以执行与CUDA非常相似的操作 - 您显式调用纹理提取函数,并传递它的坐标。这些坐标可以任意计算。不同之处在于您可以选择使用在每个像素处插补的输入坐标。 (你可以把每个像素想象成一​​个线程!)