【发布时间】:2012-05-16 11:45:01
【问题描述】:
我遇到了 3D 纹理映射的问题。如果我有几个 2d 纹理,我想用这些 2d 纹理构建一个 3d 纹理。我能做些什么来把所有这些数据放在一起?函数 glTexImage3D 以参数 const GLvoid *texels 结束,该参数导致纹理数据。但现在我有 32 个 2D 纹理并且想要获得 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 votexels 块的 2D 数据切片构建您的 3D 纹理。只需将每次调用 glTexImage2D 替换为调用 glTexSubImage3D。在上传任何数据之前,您可以使用对 glTexImage3D 的调用和 NULL 指针作为数据参数来初始化纹理(如果您使用的是 OpenGL-4,也可以使用 glTexStorage3D)。
【讨论】: