Android AngEnging学习TextureOptions、Texture
一、AndEnging 之 TextureOptions
1、NEAREST(Nearest滤波,实现上依赖GL_NEAREST做不光滑过滤,纹理环绕模式为GL_CLAMP_TO_EDGE,显示速度快画质差)
2、BILINEAR(双线性插值,实现上依赖GL_LINEAR做线性滤波,纹理环绕模式为GL_CLAMP_TO_EDGE,显示速度慢画质佳)
3、REPEATING(与NEAREST同为Nearest滤波,但纹理环绕模式为GL_REPEAT,会自动填充纹理上的空白区域,显示速度较快画质差)
4、REPEATING_BILINEAR(与BILINEAR同为双线性插值,但纹理环绕模式为GL_REPEAT,会自动填充纹理上的空白区域,显示速度很慢画质佳(低端机跑此模式异常悲剧,高端机尚可))
5、NEAREST_PREMULTIPLYALPHA(所有[PREMULTIPLYALPHA]结尾的TextureOptions与其它同名类差别仅在于是否支持根据Alpha值设置透明纹理,以下同)
6、BILINEAR_PREMULTIPLYALPHA 7、REPEATING_PREMULTIPLYALPHA
8、REPEATING_BILINEAR_PREMULTIPLYALPHA等静态对象。
除了AndEngine提供的Texture渲染模式,我们也可以按照规则自行构建需要的TextureOptions。比如构建一个混插的TextureOptions: new TextureOptions(GL10.GL_LINEAR_MIPMAP_LINEAR, GL10.GL_LINEAR_MIPMAP_NEAREST, GL10.GL_REPEAT, GL10.GL_REPEAT, GL10.GL_MODULATE, true);
另外,TextureOptions默认还有DEFAULT模式,不过该模式实际引用为NEAREST_PREMULTIPLYALPHA,也就是纹理低画质但支持Alpha。
如果您想要兼容低端机,则建议不要使用含有【BILINEAR】字样的AndEngine加载大图,而应直接使用TextureOptions.DEFAULT或TextureOptions.NEAREST_PREMULTIPLYALPHA;
因为BILINEAR模式对硬件要求较高,如果以此模式将较大纹理放到低端机上渲染,速度很可能无法保证。但是,假如您的游戏只针对高端机用户便无需介怀了。
二、AndEnging 之 Texture
刚刚学android中的AngEnging,看了很多资料,我来总结一下一些知识点:
a、Texture体系
1、纹理分为两类
★Texture:保存纹理本身的信息,如大小,格式和图片信息啥的
・Texture中的BitmapTextureAtas比较有意思,它实际上会将所有通过它加载的纹理放到一张大位图里,一起加载到GL10中,需要注意的是需要根据每张纹理的大小和位置来计算它的大小。
★TextureRegion:保存纹理的影射信息,如影射坐标等
・TextureRegion:保存单张纹理的影射信息。
・TiledTextureRegion:可以将一张纹理图中的不同子图影射成动画。例子用的就是它。
2、纹理辅助类也分为两类
★TextureAtlasSource:实现了通过各种途径加载纹理
・EmptyBitmapTextureAtlasSource:自己创建指定大小的文件
・FileBitmapTextureAtlasSource:从文件中加载位图纹理
・ExternalStorageFileBitmapTextureAtlasSource:从绝对路径中加载纹理
・InternalStorageFileBitmapTextureAtlasSource:从网络地址中加载位图纹理
・AssetBitmapTextureAtlasSource:从Asset下的文件中加载位图纹理
・assets文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像xml,java文件被预编译,可以存放一些图片,html,js, css等文件。
★Factory:定义了纹理加载的流程
・BitmapTextureAtlasTextureRegionFactory:定义了通过BitmapTextureAtas加载纹理的流程
・TextureRegionFactory:定义了不通过BitmapTextureAtas加载纹理的流程
3、纹理美化类IBitmapTextureAtlasSourceDecoratorShape(看的头大,以后再看)
・ColorSwapBitmapTextureAtlasSourceDecorator:
・FillBitmapTextureAtlasSourceDecorator:
・LinearGradientFillBitmapTextureAtlasSourceDecorator:
・OutlineBitmapTextureAtlasSourceDecorator:
・RadialGradientFillBitmapTextureAtlasSourceDecorator
b、AnimatedSprite中纹理的使用
1、加载
在BaseGameActivity.onLoadResources()中加载纹理,最后将纹理注册到Engine的中。
在BaseGameActivity.onLoadScene()中生成AnimatedSprite后调用它的animate()设定纹理的显示间隔。
2、更新
在AnimatedSprites.onManagedUpdate()中更新纹理的影射信息,确定不同的纹理片断。
3、描画
在Engine的TextureManager.updateTextures()中将纹理加载入OpenGL环境中。AnimatedSprite的doDraw()中影射纹理。