1

在 OpenGL 中,创建 3D Texture 后,我们总是需要绘制 GL_QUADS 等代理几何体来包含 3D Texture,并在这个函数中设置纹理坐标:glTexCoord3f。

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

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

谢谢回答。

4

1 回答 1

2

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

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

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

请注意,如果您使用 GLSL 像素着色器在 OpenGL 中对多边形进行着色,您实际上所做的事情与 CUDA 非常相似——您显式调用纹理获取函数,并传递它的坐标。这些坐标可以任意计算。不同之处在于您可以选择使用在每个像素处插值的输入坐标。(您可以将每个像素视为一个线程!)

于 2012-04-13T05:58:55.457 回答