【发布时间】:2011-10-18 17:21:04
【问题描述】:
假设我从给定文件加载一个字节数组作为 RGB。
我听说 OpenGL 喜欢“反转”存储其纹理,并且我看到存储图像的演示程序颠倒过来。
那么在我的程序中,我必须逐字节或逐行反转加载的 RGB 数组吗?
【问题讨论】:
标签: opengl
假设我从给定文件加载一个字节数组作为 RGB。
我听说 OpenGL 喜欢“反转”存储其纹理,并且我看到存储图像的演示程序颠倒过来。
那么在我的程序中,我必须逐字节或逐行反转加载的 RGB 数组吗?
【问题讨论】:
标签: opengl
那是因为 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 加载器都会这样做) , 或将未翻转的图像发送到 OpenGL 并在您的渲染代码之前添加上述代码。
【讨论】: