1

我正在使用以下代码从 IplImage 创建和显示纹理。它的工作时间大约有一半,但有时会扭曲图像,我认为它与纹理填充有关,但我需要修复帮助。

int loadTexture_Ipl(IplImage *image, GLuint *text) {
    if (image==NULL) return -1;
    glGenTextures(1, text);
    glBindTexture( GL_TEXTURE_2D, *text );
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image->width, image->height,0, GL_BGR, GL_UNSIGNED_BYTE, image->imageData);
    return 0;
}

此链接是输出的屏幕截图,以防有人遇到类似问题。

歪斜问题

4

1 回答 1

5

您的问题是内存中的一行IplImage可能比实际使用的图像宽(这是由于性能原因)。您在正确的轨道上使用glPixelStorei(GL_UNPACK_ALIGNMENT, 1);- 只是使用了错误的值。

举个简单的例子,想象一个 3 像素宽的图像。所以一行 (RGB) 基本上由 9 个字节(字节对齐;行之间没有间距)、10 个字节(偶数字节对齐;行之间的 1 个字节空间)、12 个字节(字对齐;行之间的 3 个字节空间)或 16 个字节组成(双字对齐;行之间有 7 个字节的空间)。

现在无法查找,但我认为 IplImage 的行默认在字边界处对齐。由于您使用 RGB(每个像素 3 个字节;不是 4 个字节),这是一个问题。只需尝试不同的值,我认为您将需要单词对齐 ( glPixelStorei(GL_UNPACK_ALIGNMENT, 4);)。

于 2012-03-13T23:53:10.997 回答