danni

Meeting you is my big luck. Weak water three thousand, only take aspoonful happiness。

导航

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()中影射纹理。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2013-04-12 11:19  danni  阅读(1234)  评论(0编辑  收藏  举报