如何在 opengl 和 cg 着色器中使用 3d 纹理



我在3D纹理映射方面遇到了问题。如果我有几个 2d 纹理,并且我想使用这些 2d 纹理构建 3d 纹理。我该怎么做才能将所有这些数据放在一起?函数 glTexImage3D 以参数 const GLvoid *texels 结尾,该参数导致纹理数据。但是现在我有 32 个 2D 纹理,想要获得 3D 纹理。怎么做?

第二个问题是关于图像空间滤波方法。有没有人知道它是什么?我应该使用这种方法来确定纹理坐标。

你真的需要3D纹理吗? 也许更好的方法是拥有纹理数组?

这里有一个很好的信息:http://www.opengl.org/wiki/Array_Texture

我认为它比使用3D纹理简单一些。例如,它们在级联阴影映射中非常有用,其中每个级联都转到纹理数组中的不同元素。

但是现在我有 32 个 2D 纹理,想要获得 3D 纹理。怎么做?

在程序中的某个时刻,您可以上传纹理。从您的问题中,我认为您已经使用glTexImage2D上传了它们。在纹理对象之间传输纹理数据既困难又繁琐且不是很健壮,因此询问如何将 2D 纹理组合成 3D 纹理有点不对劲。

但是,您可以做得很好的是从一个接一个上传到 3D 投票块的 2D 数据切片构建您的 3D 纹理。只需将每次调用 glTexImage2D 替换为 glTexSubImage3D 即可。在上传任何数据之前,您可以使用调用 glTexImage3D 和 NULL 指针作为数据参数来初始化纹理(如果您使用的是 OpenGL-4,您也可以使用 glTexStorage3D)。

最新更新