OpenGL Texture 2D阵列和mipmapping

时间:2014-11-13 10:00:03

标签: opengl

我试图理解如何mipmap texture arrays。根据我的理解,纹理数组是3维结构,其中每个纹理2D在glTexStorage3D中都有一个深度参数,它将给定的纹理设置到数组中的某个位置。但是如何指定每个纹理的mipmap数量?我可以为每个纹理指定不同数量的mipmap吗?

这是正确的方法吗?

glTexStorage3D(GL_TEXTURE_2D_ARRAY,10,GL_RGBA8,width,height,numTextures);
glTexParameteri(GL_TEXTURE_2D_ARRAY,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D_ARRAY,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D_ARRAY,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D_ARRAY,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE);
for(int i =0 ; i <numTextures;++i){

    glTexSubImage3D(GL_TEXTURE_2D_ARRAY,/*What goes here???*/, 0, 0, 0, width, height, /*What goes here?*/, GL_RGBA, GL_UNSIGNED_BYTE, data);

 }

glGenerateMipmap(GL_TEXTURE_2D_ARRAY); 

我不知道要传递给glTexSubImage3D的第二个和第8个参数的内容。第二个参数应该是多个mipmap还是当前纹理的第8个深度?

1 个答案:

答案 0 :(得分:2)

第二个参数是要加载的纹理的mipmap级别。在您的情况下,由于您希望依赖GL来生成mipmap,因此它为0。

第八个参数是深度。对于数组,这意味着您传递的层数。对于你来说,它是1,因为你在循环的每次迭代中传递一个单层。

然而,第五个参数是您要存储传入数据的深度偏移量。在您的情况下,它是您正在加载的图层i