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

时间:2012-05-16 11:45:02

标签: opengl graphics cg

我的3d纹理贴图有问题。如果我有几个2d纹理,我想用这些2d纹理构建一个3d纹理。如何将所有这些数据放在一起?函数glTexImage3D以参数const GLvoid * texels结束,这导致纹理的数据。但现在我有32个2D纹理,想要获得3D纹理。怎么做?

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

  

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

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

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