gpt4 book ai didi

c++ - OpenGL 3.+ 中的阵列纹理与 mipmap

转载 作者:行者123 更新时间:2023-11-28 05:54:37 24 4
gpt4 key购买 nike

我已阅读本教程:Array Texture ,但我不想使用 glTexStorage3D()(需要 OpenGL 4.2)函数。首先,有人可以检查我是否正确实现了这段代码(我使用的是 glTexImage3D 而不是 glTexStorage3D):

unsigned int nrTextures = 6;
GLsizei width = 256;
GLsizei height = 256;
GLuint arrayTextureID;
std::vector<unsigned char*> textures(nrTextures);

//textures: Load textures here...

glGenTextures(1, &arrayTextureID);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D_ARRAY, arrayTextureID);

//Gamma to linear color space for each texture.
glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_SRGB, width, height, nrTextures, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);

for(unsigned int i = 0; i < nrTextures; i++)
glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, i, width, height, 1, GL_RGB, GL_UNSIGNED_BYTE, textures[i]);

/*glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);*/
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_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);

/*glGenerateMipmap(GL_TEXTURE_2D_ARRAY);*/

glBindTexture(GL_TEXTURE_2D_ARRAY, 0);

如何使用此实现实现 mipmapping?

最佳答案

这看起来很正常。我能看到的唯一问题是 GL_SRGB 不是有效的内部纹理格式。所以 glTexImage3D() 调用需要使用 GL_SRGB8 代替:

glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_SRGB8, width, height, nrTextures, 0,
GL_RGB, GL_UNSIGNED_BYTE, NULL);

要生成 mipmap,您可以调用:

glGenerateMipmap(GL_TEXTURE_2D_ARRAY);

在调用 glTexSubImage3D() 调用用数据填充纹理之后。

关于c++ - OpenGL 3.+ 中的阵列纹理与 mipmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34459545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com