【发布时间】:2020-11-27 09:40:09
【问题描述】:
我有一个关于在没有文件的情况下创建纹理的问题。我的目标是制作一个将 vec3 颜色作为输入并返回该纹理的纹理 ID 的函数。
这是我目前所拥有的,但它给出了带有随机混杂颜色条纹的奇怪输出:
unsigned int colorToTexture(glm::vec3 color, const int size) {
// Create id for texture
unsigned int tex;
// generate and bind texture
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);
// set texture wrap parameters
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
// set texture filter parameters
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// set image data
unsigned char* data = new unsigned char[size * size * sizeof(unsigned char)];
for (unsigned int i = 0; i < (int)(size * size * sizeof(unsigned char)) / 3; i ++) {
data[i * 3] = (int)(color.x * 255);
data[i * 3 + 1] = (int)(color.y * 255);
data[i * 3 + 2] = (int)(color.z * 255);
}
// set texture data and generate mipmaps
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, size, size, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
glGenerateMipmap(GL_TEXTURE_2D);
// free image memory
delete[] data;
return tex;
}
【问题讨论】:
-
在
glTexImage2D调用之前尝试使用glPixelStorei(GL_UNPACK_ALIGNMENT, 1)。 -
用纯色创建
sizexsizetexutre 有什么意义?这既会消耗更多内存,也会比仅使用1x1慢。 -
我这样做是为了以后在编辑器中添加编辑纹理的功能。我还认为使用 1x1 纹理可能不起作用,因为它的尺寸必须是 2 的幂(虽然 1 是 2 的 0 次方,但对我来说似乎有点冒险)
-
1x1 纹理从一开始就可以正常工作,但“2 的幂”要求在 20 年前就下降了。
标签: opengl textures glteximage2d