必须翻转OpenGL纹理吗?

时间:2011-10-18 17:21:04

标签: opengl

假设我从给定文件加载一个字节数组作为RGB。

我已经读过OpenGL喜欢将其纹理“反转”存储,而且我已经看到了存储图像的演示程序颠倒过来。

所以在我的程序中,我必须逐字节或逐行反转加载的RGB数组吗?

1 个答案:

答案 0 :(得分:6)

那是因为Bitmap( .bmp )格式将它的行存储为倒置。我不确定是谁想出来的,但这是一个文件格式的东西。好吧,是的,如果你使用自己的.bmp加载器,你必须这样做。但是,您可以使用已经为您写过“颠倒”图像的图像。同样,它只是一个.bmp的东西。默认情况下,OpenGL在非翻转图像上有效。

这是一个小技巧:如果您不想更改.bmp加载程序,可以告诉OpenGL为您翻转图像:

glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glScalef(1.0f, -1.0f, 1.0f);
glMatrixMode(GL_MODELVIEW);

这就是我所说的“默认”。如果您愿意,可以将OpenGL颠倒过来。但是,这仅适用于加载.bmp文件的情况。其他文件格式正确存储其行。因此,我更喜欢第一种方法 - 使用真正的.bmp加载器。

为了清楚起见:如果您加载.bmp文件,必须手动翻转图片,然后再将其发送到OpenGL(大多数.bmp加载程序都会这样做) , OR 将未翻新的图像发送给OpenGL,并在渲染代码之前添加上述代码。