0

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

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

4

2 回答 2

1

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

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

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

于 2012-05-16T17:09:52.763 回答
0

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

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

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

于 2012-05-16T12:27:41.710 回答