pv3d 学习笔记-技巧与总结部分

来源:互联网 发布:mac bootcamp 删除 编辑:程序博客网 时间:2024/06/08 04:50
 

1.平铺

在做网络开发时,总是要考虑的文件大小这个因素的。在PV3D 中使用大量的纹理会耗掉大量的带宽资源。
任何可以减少文件大小的方法都应该考虑,尤其是在做大型项目的时候。
一个经常使用到得技巧就是纹理平铺,它的方法是在横向和纵向将纹理重复平铺从而避免为此创建一个大
的位图    

    如:

        private function init():void
        {    
            var material:BitmapFileMaterial = new BitmapFileMaterial("assets/tile.jpg");
            material.addEventListener(FileLoadEvent.LOAD_COMPLETE,loadComplete);
        
            var plane:Plane = new Plane(material,1024,512);
            scene.addChild(plane);
        }
        
        private function loadComplete(e:FileLoadEvent):void
        {
            var material:BitmapFileMaterial = BitmapFileMaterial(e.target);
            
            material.tiled = true;
            //水平和纵向重复次数
            material.maxU = 8;
            material.maxV = 4;
        }

    
2.翻转材质(Flipping your material)

    如:

        private function init():void{    
            var frontMat:BitmapFileMaterial = new BitmapFileMaterial("assets/front.jpg");
            var backMat:BitmapFileMaterial = new BitmapFileMaterial("assets/back.jpg");
            var leftMat:BitmapFileMaterial = new BitmapFileMaterial("assets/left.jpg");
            var rightMat:BitmapFileMaterial = new BitmapFileMaterial("assets/right.jpg");
            var topMat:BitmapFileMaterial = new BitmapFileMaterial("assets/top.jpg");
            var bottomMat:BitmapFileMaterial = new BitmapFileMaterial("assets/bottom.jpg");
            
            frontMat.addEventListener(FileLoadEvent.LOAD_COMPLETE,loadComplete);
            backMat.addEventListener(FileLoadEvent.LOAD_COMPLETE,loadComplete);
            leftMat.addEventListener(FileLoadEvent.LOAD_COMPLETE,loadComplete);
            rightMat.addEventListener(FileLoadEvent.LOAD_COMPLETE,loadComplete);
            topMat.addEventListener(FileLoadEvent.LOAD_COMPLETE,loadComplete);
            bottomMat.addEventListener(FileLoadEvent.LOAD_COMPLETE,loadComplete);
            
            var materialsList:MaterialsList = new MaterialsList();
            materialsList.addMaterial(frontMat,"front");
            materialsList.addMaterial(backMat,"back");
            materialsList.addMaterial(leftMat,"left");
            materialsList.addMaterial(rightMat,"right");
            materialsList.addMaterial(topMat,"top");
            materialsList.addMaterial(bottomMat,"bottom");
            
            var cube:Cube = new Cube(materialsList,800,800,800,5,5,5);
            scene.addChild(cube);
        }
        
        private function loadComplete(e:FileLoadEvent):void{
            var material:BitmapFileMaterial = BitmapFileMaterial(e.target);
            //设置材质的opposite属性为true,这样才能使矩形内面也可见
            material.opposite = true;
            //为横向翻转
            BitmapMaterialTools.mirrorBitmapX(material.bitmap);
        }

3.Power of two textures 2的幂数纹理
    (译者注:Power of two 是指2的幂数是一个集合,如(01,2,4,8,16,32…))
    如果你使用的纹理的尺寸是2的幂数,这会在Flash Player中使用纹理细化成为可能。这完全
是Flash Player原生执行的精细操作。创建位图的多个副本。一旦位图需要使用了,被放大
或者被缩小,Flash Player会从内存中取出出两个最接近的位图,在每一处进行差值处理已
得到一个平滑的图片.渲染光滑的纹理细化的图片是非常快的,甚至你设置材质的光滑属性
为True这样的操作对性能的影响也是微乎其微的

    因此为了能够使用纹理细化这个优势,你应该2的幂数尺寸的位图。这样才能是你的材质光
滑。在flashplayer中有效的2的幂数为2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 和 2048。图片
的纵横比不需要设置成1:1。你可以将位图的长宽随意设置为两个2的幂数组合。比如1024
x256。
当我们无法使用2的幂数的尺寸时,我们可以使用PV3D实现的自动细化功能,这是
BitmapMaterial类的一个静态属性。
BitmapMaterial.AUTO_MIP_MAPPING = true;
当你设置为 true时,那么所有新创建的位图材质都为被PV3D修正以支持纹理细化功能。

 

3.总结

材质就是3D物体的皮肤,线框材质和颜色材质是最基础的材质,高级点的材质就是位图材
质和影片剪辑材质。这些类都可以被扩展用来更简单的创建他们的对象。
在这一章里我们详细的讲解了一下有关材质的类:
WireframeMaterial 线框材质
ColorMaterial 颜色材质
BitmapMaterial 位图材质
BitmapFileMaterial 位图文件材质
BitmapAssetMaterial 位图元件材质
MovieMaterial 影片材质
MovieAssetMaterial 影片元件材质
VideoStreamMaterial 视频流材质
CompositeMaterial 组合材质
我们了解了几个有关材质的特别技巧:
平滑材质使用 material.smooth = true.
双面材质使用 material.doubleSided = true.
动画材质使用 material.animated= true.
阻止材质扭曲使用 material.precise = true.
材质和物体可以交互使用 viewport.interactive = True
material.interactive = true.
翻转材质使用DisplayObject的 scaleX属性,或者使用BitmapMaterialTools功能类的
静态方法来翻转bitmap数据:BitmapMaterialTools.mirrorBitmapX( material.bitmap).
平铺材质使用 material.tiled = true并设置 material.maxU 和 material.maxV这两个
横线和纵向重复数.


原创粉丝点击