5.9DXT压缩纹理扩展


文档摘要

## 5.9 DXT压缩纹理扩展 在前面两节从OpenGL获取到了压缩纹理,并用来做渲染,在单台电脑上测试是一切正常的。 由于我经常在公司两台电脑、家里两台电脑之前测试,所以发现一个问题:在不同电脑上,从OpenGL获取到的压缩纹理格式并不相同,这导致有的电脑识别不了另一台电脑导出的压缩纹理。 前面上传纹理进行压缩的代码如下: 第三个参数 指定了压缩纹理格式,可以看到这里只是指定了要压缩,但是并没有指定某一个压缩格式,那么OpenGL就会自动选择一个。 经过测试发现,在公司电脑上压缩出来的是 ,而在家里的电脑是 。 公司电脑上识别不了家里电脑压缩出来的格式,但是公司压缩的却能被家里电脑识别。 公司压缩出来的是 格式,这个格式很常见,在 这一节,用来对比的Unity压缩纹理格式就是 。

5.9 DXT压缩纹理扩展

CLion项目文件位于 samples\texture\export_dxt

在前面两节从OpenGL获取到了压缩纹理,并用来做渲染,在单台电脑上测试是一切正常的。

由于我经常在公司两台电脑、家里两台电脑之前测试,所以发现一个问题:在不同电脑上,从OpenGL获取到的压缩纹理格式并不相同,这导致有的电脑识别不了另一台电脑导出的压缩纹理。

前面上传纹理进行压缩的代码如下:

//3. 将图片rgb数据进行压缩上传到GPU。 glTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB, texture2d->width_, texture2d->height_, 0, texture2d->gl_texture_format_, GL_UNSIGNED_BYTE, data);

第三个参数 GL_COMPRESSED_RGB 指定了压缩纹理格式,可以看到这里只是指定了要压缩,但是并没有指定某一个压缩格式,那么OpenGL就会自动选择一个。

经过测试发现,在公司电脑上压缩出来的是COMPRESSED_RGBA_S3TC_DXT5_EXT 33779,而在家里的电脑是COMPRESSED_RGBA_FXT1_3DFX 34481

公司电脑上识别不了家里电脑压缩出来的格式,但是公司压缩的却能被家里电脑识别。

公司压缩出来的是DXT格式,这个格式很常见,在5.7 图片压缩工具这一节,用来对比的Unity压缩纹理格式就是DXT1

1. OpenGL压缩图片为DXT格式

glTexImage2D指定压缩纹理格式为 COMPRESSED_RGBA_S3TC_DXT5_EXT就可以获取DXT格式的压缩纹理。

//file:texture2d.cpp line:27 Texture2D* Texture2D::LoadFromFile(std::string& image_file_path) { ...... int image_data_format=GL_RGB; if (data!= nullptr) { //根据颜色通道数,判断颜色格式。 switch (channels_in_file) { case 1: { image_data_format = GL_ALPHA; break; } case 3: { image_data_format = GL_RGB; texture2d->gl_texture_format_=GL_COMPRESSED_RGB_S3TC_DXT1_EXT; break; } case 4: { image_data_format = GL_RGBA; texture2d->gl_texture_format_=GL_COMPRESSED_RGBA_S3TC_DXT5_EXT; break; } } } ...... }

但是当修改代码后,发现编译不通过,找不到COMPRESSED_RGBA_S3TC_DXT5_EXT这个枚举。

这是因为OpenGL自身并不支持DXT格式,从COMPRESSED_RGBA_S3TC_DXT5_EXT_EXT看出,对DXT格式的支持是以扩展提供的。

官网相关介绍:https://www.khronos.org/opengl/wiki/S3_Texture_Compression

扩展的枚举,都在glext.h这个头文件,官网下载:https://www.khronos.org/registry/OpenGL/api/GL/glext.h

下载后放到项目中就可以编译成功。

2. 使用DXT格式纹理

使用导出的DXT格式纹理渲染,一切OK。

教程项目原始图片路径是写死在代码中的,后面优化了。 Windows系统直接将图片拖到程序上就可以压缩。 Mac系统在命令行运行程序,将图片路径作为参数传递。 支持一次处理多个图片。 优化后的CLion项目文件位于 samples\texture\export_compressed_texture_tools

发布者: 作者: 转发
评论区 (0)
U