2012-05-16 80 views
0

我有一个3D纹理映射的问题。如果我有几个2D纹理,并且我想用这些2D纹理构建3D纹理。我能做些什么来将所有这些数据放在一起?函数glTexImage3D以一个参数const GLvoid * texels结束,这会导致纹理的数据。但是现在我有32个2D纹理,并且想要获得3D纹理。怎么做?如何在opengl和cg着色器中使用3d纹理?

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

回答

0

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

在程序中的某个位置上传纹理。从你的问题,我认为你已经使用glTexImage2D上传它们。在纹理对象之间传输纹理数据非常困难,麻烦并且不够稳健,因此要求如何将2D纹理结合到3D纹理中是有点过时的。

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

1

你真的需要3D纹理吗?也许更好的方法是有纹理阵列?

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

它比3D纹理简单一些使用我的想法。它们对于级联阴影映射中的实例非常有用,其中每个级联转到纹理阵列中的不同元素。