我一直认为这些单词只是使用某种特殊压缩方法的文件格式,但最近我找到了一种可以使用DTX1作为压缩方法的文件格式“DDS”。所以我很好奇,如果它们都只是压缩算法,这是否意味着我可以使用DXT1(ETC1,PVR)作为压缩方法来获取PNG图像?
答案 0 :(得分:1)
它们是难以支持的二进制压缩格式(不是文件格式)。
桌面GPU支持 大多数移动GPU都支持 PowerVR / Imgtec制造的GPU支持{p> PVRTC,这是所有iPhone(以及一些机器人?)如果你想使用它们,你通常会运行一些离线工具来生成它们,然后为工具吐出的格式编写一个加载器或者自己编写。然后,您将数据从文件中提取出来,并使用数据调用gl.compressedTexImage2D(...)
。
压缩纹理格式的优点是它们占用的GPU内存更少,因此您可以使用更多内存,并且它们可以占用更少的内存带宽,这意味着它们可以更快地运行。令人遗憾的是,尽管它们是压缩的,但它们的压缩程度几乎与.jpg(通常)一样小,因此它们可能需要更长的时间才能通过互联网进行传输。对于存储在本地计算机上的游戏,例如您从Steam安装的游戏,您真的不关心游戏的下载速度,您需要花费10分钟到几个小时。对于要在网页上播放的WebGL游戏,大多数用户不会等待很长时间,因此需要权衡利弊。
这些格式的另一个问题就像它上面说的那样,它们仅适用于某些设备。要跨设备支持它们,您需要通过调用gl.getExtension
查询各种压缩格式来执行查询WebGL之类的操作,然后从服务器请求用户设备的正确纹理集。对于本机游戏而言,这通常不是问题,因为Android应用程序是从iPhone应用程序单独制作的,并且与桌面应用程序分开,但对于网页,理想情况下,您希望任何设备都是能够运行相同的页面。台式机,平板电脑,也许是智能手机。 (虽然对于Android有很多GPU,所以问题类似于本机Android应用程序)