creator中pvr使用呢
概述
之前写过一个关于2DMMO优化的分享,有些人问到其中的压缩纹理要怎么做。其实实施起来很简单,很多看过cocos2dx
的人都知道怎么做,这篇分享主要针对对这块不是太了解的新同学。
我假定对这篇分享有兴趣的同学都知道压缩纹理
是什么,有什么好处和坏处。如果不大了解,可以先看一下pvr, etc
相关的知识。
在手游中使用压缩纹理是很常见的需求,通常:
- IOS会使用PVR来压缩,IOS要求图片高宽必须是2的幂,且必须是正方形。
- Android会使用ETC1,由于ETC1不能支持透明通道,对于有透明的图,一般也会用ETC1+Alpha的做法。
使用工具
生成压缩纹理当然是使用现成的工具了:
IOS
使用PVRTexTool
,在这里下载29,具体的使用方法可能要参考工具的文档,下面是一个简单的例子:
PVRTexToolCLI -i $(infile) -o $(outfile) -square + -pot + -q pvrtcbest -f PVRTC1_4,UBN,lRGB
其中$(infile)
和$(outfile)
分别是原图片名和压缩后的图片名,如果图片没有透明,PVRTC1_4
换成PVRTC1_4_RGB
。
Android
使用Mali Texture Compression Tool
,在这里下载28,这个工具可以生成ETC1和带透明通道的ETC1
# 原始格式
etcpack ${infile} ${outfile} -c etc1
# 带透明通道
etcpack ${infile} ${outfile} -c etc1 -aa
带透明通道的ETC1其实就是将图片和遮罩合成一张图,最终的图片高度是原始图片的2倍。而要正确显示图片,则需要用Shader
把遮罩部分作为Alpha值加到原图上。Shader如下所示:
attribute vec4 a_position;
attribute vec2 a_texCoord;
attribute vec4 a_color;
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
varying vec2 v_alphaCoord;
void main()
{ gl_Position = CC_PMatrix * a_position;v_fragmentColor = a_color; v_texCoord = a_texCoord;
}precision lowp float;
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
varying vec2 v_alphaCoord;
void main()
{ vec4 v4Colour = texture2D(CC_Texture0, v_texCoord);v4Colour.a = texture2D(CC_Texture0, vec2(0.0, 0.5) + v_texCoord).r;gl_FragColor = v_fragmentColor * v4Colour;
}
兼容Web和Native
现在知道如何生成和使用压缩纹理了,要怎么整合进Creator呢?
- 在开发阶段,我们还是正常使用png, jpg,这样在浏览器和模拟器都能正常显示。
- 在构建阶段,分成三步走:
- 用Creator命令行生成原生工程。
- 调用我们自己的脚本,将工程中的图片转成压缩纹理,但要注意转换后的图片名不要变,比如
a.jpg
转换后仍然叫a.jpg
,只不过内容已经是压缩纹理了。 - 用Creator命令行编译安装包。
这样打出来的包,在手机中是可以正常显示的,原因是cocos-2dx
并不是以文件后缀来判断类型的,它是根据文件内容的头几个字节来判断的。
而cocos-2dx
其实还支持gzip
压缩格式的,也就是我们将图片转换成pvr
或etc1
后,还可以再压缩成gzip
,最终还是可以正常解析出来。但由于文件大小小了很多,加载速度会变快。
要完成这样的构建流程,你可能需要用一个脚本来实现自动化,我比较推荐python
,它的库实在太强大和方便了。
另外,并不是所有的图片都适合用压缩纹理,比如UI图片压缩后会有明显的锯齿,像场景, 特效这类就比较适合。总之,在使用压缩纹理之前,你可能需要对图片类型进行一些规范化。
creator中pvr使用呢相关推荐
- Cocos Creator中的动画支持技术
Cocos Creator主要亮点 官方的权威描述是:Cocos Creator是以内容创作为核心的一体化游戏开发工具,这个引擎基于Cocos2d-x,组件化,脚本化,数据驱动,跨平台发布. 本人使用 ...
- 如何在Qt Creator中导入图标资源
本文主要描述如何在Qt Creator中创建资源文件,并的打入导入图标文件. 查看图标资源文件时,可以在项目的工程文件上鼠标单击右键-Open With-资源编辑器,效果如下图所示: 在项目的工程文件 ...
- linux qt自带例子无法,在Qt Creator中,错过了一些例子
在Arch Linux中安装了Qt Creator 2.8 使用pacman安装qt5- *(*作为每个相关包) 存储库中没有示例,因此我使用了AUR,qt5示例中的示例 示例安装在/usr/shar ...
- cocos入门7:cocos creator 中的ui系统
1.UI系统 一个完整的游戏一般由不同的系统组成.从技术的角度看一般会不包含UI系统.动画系统.物理系统和声音系统等.其中开发声音相关的内容在引擎的帮助下变得很简单. 对于目前市面上的手机游戏来说,特 ...
- Qt Creator中如何为某项目单独配置默认编码方式
当我们有很多个Qt项目 有的采用UFT-8,而有的采用GBK时,采用普通的设置方式需要来回切换默认编码,很是浪费时间 其实Qt Creator是可以为某项目单独配置默认编码方式的 Qt Creator ...
- creator中矩阵究竟是如何参与坐标运算的
本地矩阵和世界矩阵 显示节点CCNode,内部有一个变量,叫_trs,注意这个很重要,它主要存储了以下几个数据,我们在外部修改节点下面这些数据的时候,数据会优先存储到这个数组里,然后标记矩阵为脏,表示 ...
- 【Qt OpenGL】Qt Creator中的3D绘图及动画教程
Qt Creator中的3D绘图及动画教程(参照NeHe) 刚刚学习了Qt Creator,发现Qt提供了QtOpenGL模块,对OpenGL做了不错的封装,这使得我们可以很轻松地在Qt程序中使用Op ...
- Qt Creator中的项目模板说明
Qt Creator中的项目模板说明 项目 向导模板 用途 Application (Qt for MCU) MCU Support Application 创建一个应用程序,该应用程序使用Qt QM ...
- 【Y忍冬草】Qt中添加第三方插件VTK,Designer中有但Creator中没有
版本:Qt5.8+VTK7.0 晕菜,之前在用Qt进行第三方插件VTK的时,不管是在Qt Creator中打开还是在Qt Designer中打开,都可以找到这个小东西,结果中间Qt出过一次问题,重新卸 ...
最新文章
- 2021年春季学期-信号与系统-第三次作业参考答案
- jQuery循环使用相同类的元素
- Ionic实战 自动升级APP(Android版)
- MaxCompute2.0性能评测:更强大、更高效之上的更快速
- 解决 IntelliJ IDEA 安装后界面消失,再次打开后界面不动
- mysql主库宕机能写吗_MYSQL主主切换(主库宕机)_MySQL
- 【RK3399Pro学习笔记】九、ROS客户端Client的编程实现
- 文献读的越多,离原创越远
- Mozilla 扩展漏洞奖励计划,涵盖利用缓解技术绕过
- ali arthas 火焰图_阿里巴巴 Arthas 3.1.5版本支持火焰图,快速定位应用热点
- 前端验证码绘制(canvas)
- leetcode 9. 回文数(python)
- 机器学习:残差学习、RNN、GAN、迁移学习、知识蒸馏
- 洛谷oj---1036 选数
- 错误码应该如何设计?
- 穿越计算机的迷雾--读书笔记三
- android 脚本录制工具,安卓自动化脚本录制工具
- 华为首次自曝“天才少年”成果:入职不到一年就干成这件大事,网友:值200万年薪!| 留言送书...
- 009 二维随机变量分布 min max 习题
- 使用beeline不能truncate table表