OpenGL 纹理显示有线而不是纯色

OpenGL Texture Showing Wired Lines instead of solid color

我的代码

void SetPixel(int x, int y)
{
        unsigned char* offset = mImageData + (x + mImageHeight * y) * sizeof(unsigned char) * 3;
        offset[0] = 255;
        offset[1] = 0;
        offset[2] = 0;

}

 for (int j = imageHeight - 1; j >= 0; j--)
    {
        for (int i = 0; i < imageWidth; i++)
        {
           SetPixel(i, j);
        }
     }

OpengL 代码:

创建: m_InternalFormat = GL_RGB8; m_DataFormat = GL_RGB; m_Data = new unsigned char[宽 * 高 * 3];

glGenTextures(1, &m_RendererID);
glBindTexture(GL_TEXTURE_2D, m_RendererID);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

glGenerateMipmap(GL_TEXTURE_2D);

设置数据:

glBindTexture(GL_TEXTURE_2D, m_RendererID);

    if(alpha)
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, m_Width, m_Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
    else
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, m_Width, m_Height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);

    glGenerateMipmap(GL_TEXTURE_2D);

现在我应该得到一个红色纹理,但我得到的是:

见左上角。贴图不对

我认为这可能是因为没有设置正确的像素偏移。但我无法弄清楚到底出了什么问题?请帮助。

默认情况下,OpenGL 假定图像的每一行的开始对齐到 4 个字节。这是因为默认情况下 GL_UNPACK_ALIGNMENT 参数为 4。由于图像具有 3 个颜色通道 (GL_RGB),并且被紧密打包,因此图像的一行大小可能不会对齐到 4 个字节。
当具有 3 个颜色通道的 RGB 图像被加载到纹理对象并且 3*width 不能被 4 整除时,GL_UNPACK_ALIGNMENT 必须设置为 1,然后用 glTexImage2D 指定纹理图像:

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, m_Width, m_Height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);