DDS纹理加载
如何将 dds 纹理文件加载到 OpenGL 2dtexture 或立方体贴图纹理中?
How would I load a dds texture file into an OpenGL 2dtexture or cube map texture?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如何将 dds 纹理文件加载到 OpenGL 2dtexture 或立方体贴图纹理中?
How would I load a dds texture file into an OpenGL 2dtexture or cube map texture?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
我相信您使用 glCompressedTexImage2DARB 方法及其朋友。
此 PDF 似乎包含一些可能对您有帮助的有希望的信息。
I believe you use the glCompressedTexImage2DARB method and its friends.
This PDF seems to contain some promising info that may be helpful to you.
根据您的需要,DevIL 库可以负责向 OpenGL 提供 DDS 文件内容。
Depending on your needs, the DevIL library can take care of feeding OpenGL with a DDS file content.
如果 DDS 包含压缩纹理,则使用 glCompressedTexImage2DARB(),如果它包含未压缩数据,则应用通常的 glTexImage2D 过程。 如果 DDS 文件包含 mipmap,则为每个 mipmap 级别一次;如果是立方体贴图,则为每个立方体贴图面一次。
有关如何读取 DDS 文件中的标头和数据,请查找 MSDN 或 DirectX SDK 上的文档。 这是一个相当标准的容器格式,没有太多惊喜。
请注意,DDS 使用左上角图像原点,而 OpenGL 假定图像数据使用左下角原点。 这意味着您可能希望在加载 DDS 图像后垂直翻转它。如果它们位于 DXT1/3/5 中,您可以在不解压它们的情况下执行此操作,但这是一个稍微复杂的过程,涉及对每个 4x4 的内容进行位操作压缩块。
If the DDS contains a compressed texture then use glCompressedTexImage2DARB(), if it contains uncompressed data the usual glTexImage2D procedure applies. Once for each mipmap level if the DDS file contains mipmaps, and once for each cubemap face if its a cubemap.
For how to go about reading the header and data in a DDS file look up the documentation for it on MSDN or in the DirectX SDK. It's a fairly standard container format, there aren't too many surprises.
Be aware that DDS uses a top-left image origin whereas OpenGL assumes a bottom-left origin for image data. This means you will probably want to vertically flip a DDS image after loading it in. You can do this without decompressing them if they are in DXT1/3/5, but it's a slightly fiddly process that involves bit manipulation on the contents of each 4x4 compression block.