簡體   English   中英

帶有mipmap的OpenGL 3. +中的陣列紋理

[英]Array texture in OpenGL 3.+ with mipmap

我已經閱讀了本教程: 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()調用數據填充紋理之后。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM