必须翻转OpenGL纹理吗?

cat*_*_cd 5 opengl

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

我已经读过OpenGL喜欢将它的纹理"反转"存储,我已经看到了存储图像的演示程序颠倒了.

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

Rap*_* R. 6

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

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

glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glScalef(1.0f, -1.0f, 1.0f);
glMatrixMode(GL_MODELVIEW);
Run Code Online (Sandbox Code Playgroud)

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

需要说明的是:如果加载.bmp文件,必须先手动翻转图像,然后再将其发送给OpenGL(大多数.bmp加载程序),或者将未翻转的图像发送给OpenGL,并在渲染代码之前添加上述代码.

  • 实际上,DIB文件格式(它实际上称之为)支持向上和向下行排序.如果高度标题字段为负,则为向下,如果高度为正,则为向上. (3认同)