【发布时间】:2015-11-05 11:56:39
【问题描述】:
int j,k,t3,t4;
for (int i = 0;i < width;i++)
for (j = 0;j < height;j++)
{
t3 = (i*height + j)*3 ;
t4 = (i*height + j) * 4;
for (k = 0;k < 3;k++)
texture[t4+k] = data[t3+k];
texture[t4 + 3] = (data[t3 + 1]==255 && data[t3 + 2]==255 && data[t3]==255) ? 0 : 255;
}
GLuint textureID;
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, texture);
这是一个位图文件,我用原始数据成功加载了它。
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_BGR, GL_UNSIGNED_BYTE, data);
【问题讨论】:
-
纹理和数据是如何定义的?
-
@BDL data = new unsigned char[imageSize];无符号字符*纹理=新无符号字符[imageSize * 2];数据是从位图文件读取的原始 24 位图像数据,而纹理是修改后的数据,我在第一个代码块中通过循环在每个 BGR 数据之后附加了一个 alpha 通道。
-
@BillSun:BMP 文件通常以 4 字节的行对齐方式存储,OpenGL 默认需要这种格式的数据。在访问源数据时,转换数据的代码不会考虑这种对齐方式。 (当您使用每像素 4 个字节时,目标将始终对齐,因此这不是问题)。
标签: opengl textures transparent alpha texture-mapping