游戏进度:关于DirectX3D的压缩纹理格式DXT1/CB1

2022-11-17
前几天刚弄完将FBX文件内的模型骨骼动画实现到自己的游戏,但是看着那只有线条的正方体模型在那走来走去总觉得缺少一点美感,于是乎觉得应该开始研究纹理了
这几天就一直在研究纹理,以将纹理加载并附着到模型上
另外弄懂了DXT1格式的压缩纹理,DX叫做BC1格式
为了弄明白纹理和压缩纹理在内存中的模型,我决定自己做一个能显示纹理的小组件,以方便自己以后能轻松的与各种纹理打交道
这也就意味我需要了解压缩之后的纹理在内存中的布局,首先我选了一个最简单的DXT1/BC1格式的没有带mipmap的压缩纹理文件作为开始
我尝试将这种类型的纹理进行解压,但尝试了更多的失败,首先是需要使用GDI+将图像显示到屏幕,将图像文件加载到GDI+进行显示还是比较简单的
于是我开始尝试加载压缩的DXT1纹理文件并自行解压然后加载到GDI+进行显示
首先我了解到这种格式的压缩算法,系将纹理以16个像素为单元进行压缩,DXT1算法最终将RGB颜色压缩到每个像素仅用4位就能表达
对于首次接触到压缩图像的我还是比较惊叹前人的智慧,毕竟在我的理解中4位最大数才能表示16个数字,但经过压缩后却能表达RGB3种颜色值
DXT1以16个像素进行压缩,一开始我尝试将连续内存的64位解析成color_0(16bit),color_1(16bit),index(32bit),然后以连续的方式将解压后的像素赋值到新内存,但这样做我失败了,后来多次查看资料,慢慢理解深刻,原来是以正方形的内存模型进行压缩,然后我尝试以正方形的内存模型进行解析压缩数据和解压数据,并将解压数据以正方形模型赋值到新内存,百思不得其解,依然是各种失败的滋味,继而各种查找资料,但网上的资料没有找到像在做我这种事情的人
大部分都是讨论的压缩算法和压缩的优势而没有压缩和解压的具体代码,各种尝试下也不记得那一刻怎么触发的想法
我尝试将压缩的数据以连续的64位进行解析,再将数据以正方形模型解压到新内存,这种方式我成功了游戏进度:关于DirectX3D的压缩纹理格式DXT1/CB1_第1张图片

你可能感兴趣的:(游戏,3d,算法)