OpenGL 纹理必须翻转吗?
假设我从给定文件中加载一个 RGB 字节数组。
我读到过 OpenGL 喜欢“反转”存储其纹理,并且我见过演示程序存储颠倒的图像。
那么在我的程序中,我必须逐字节或逐行反转加载的 RGB 数组吗?
Suppose I load an array of bytes as RGB from a given file.
I've read that OpenGL likes to store its textures "reversed", and I've seen demo programs storing their images flipped upside down.
So in my program, must I reverse the loaded RGB array byte by byte, or line by line?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是因为位图 (.bmp) 格式将其行倒置存储。我不确定是谁想出这个的,但这是一个文件格式的问题。那么,是的,如果您使用自己的 .bmp 加载器,则必须这样做。但是,您可以使用已经编写好的图像来为您“颠倒”图像。再说一次,这只是一个 .bmp 的东西。 OpenGL 默认情况下适用于非翻转图像。
这里有一个小技巧:如果你不想改变你的 .bmp 加载器,你可以告诉 OpenGL 为你翻转你的图像:
这就是我所说的“默认”的意思。如果您愿意,您可以将 OpenGL 颠倒过来。但是,这仅在您仅加载 .bmp 文件时才有效。其他文件格式可以正确存储其行。因此,我更喜欢第一种方法 - 使用真正的 .bmp 加载器。
需要明确的是:如果您加载 .bmp 文件,则必须在将图像发送到 OpenGL 之前手动翻转图像(大多数 .bmp 加载程序都会这样做), >或者将未翻转的图像发送到 OpenGL 并在渲染代码之前添加上述代码。
That's because the Bitmap(.bmp) format stores it's lines upside-down. I'm not sure who came up with that, but it's a file-format thing. So well, yes, you must do it if you use your own .bmp loader. You can, however, use one which has already been written which "upside-downs" the image for you. Again, it's only a .bmp thing. OpenGL works by default on non-flipped images.
Here's a little trick: If you don't want to change your .bmp loader, you can tell OpenGL to flip your image for you:
That's what I meant with "by default". You can turn OpenGL upside-down if you want to. However, this only works if you only load .bmp files. Other file formats store their lines properly. Therefore, I prefer the first approach - use a real .bmp loader.
Just to be clear: IF you load .bmp files, you MUST flip the image either by hand before sending it to OpenGL (which most .bmp loaders do), OR send the unflipped image to OpenGL and add the above code before your rendering code.