- 最后登录
- 2018-12-19
- 注册时间
- 2012-8-20
- 阅读权限
- 90
- 积分
- 54706
- 纳金币
- 32328
- 精华
- 41
|
1.平铺在做网络开发时,总是要考虑的文件大小这个因素的。在PV3D 中使用大量的纹理会耗掉大量的带宽资源。
任何可以减少文件大小的方法都应该考虑,尤其是在做大型项目的时候。
一个经常使用到得技巧就是纹理平铺,它的方法是在横向和纵向将纹理重复平铺从而避免为此创建一个大
的位图 如: private function init():void
{
var material:BitmapFileMaterial = new BitmapFileMaterial("assets/tile.jpg");
material.addEventListener(FileLoadEvent.LOAD_COMPLETE,loadComplete);
var planelane = new Plane(material,1024,512);
scene.addChild(plane);
}
private function loadComplete(e:FileLoadEvent):void
{
var material:BitmapFileMaterial = BitmapFileMaterial(e.target);
material.tiled = ***e;
//水平和纵向重复次数
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属性为***e,这样才能使矩形内面也可见
material.opposite = ***e;
//为横向翻转
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会从内存中取出出两个最接近的位图,在每一处进行差值处理已
得到一个平滑的图片.渲染光滑的纹理细化的图片是非常快的,甚至你设置材质的光滑属性
为***e这样的操作对性能的影响也是微乎其微的 因此为了能够使用纹理细化这个优势,你应该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 = ***e;
当你设置为 ***e时,那么所有新创建的位图材质都为被PV3D修正以支持纹理细化功能。
3.总结
材质就是3D物体的皮肤,线框材质和颜色材质是最基础的材质,高级点的材质就是位图材
质和影片剪辑材质。这些类都可以被扩展用来更简单的创建他们的对象。
在这一章里我们详细的讲解了一下有关材质的类:
WireframeMaterial 线框材质
ColorMaterial 颜色材质
BitmapMaterial 位图材质
BitmapFileMaterial 位图文件材质
BitmapAssetMaterial 位图元件材质
MovieMaterial 影片材质
MovieAssetMaterial 影片元件材质
VideoStreamMaterial 视频流材质
CompositeMaterial 组合材质
我们了解了几个有关材质的特别技巧:
平滑材质使用 material.smooth = ***e.
双面材质使用 material.doubleSided = ***e.
动画材质使用 material.animated= ***e.
阻止材质扭曲使用 material.precise = ***e.
材质和物体可以交互使用 viewport.interactive = ***e
material.interactive = ***e.
翻转材质使用DisplayObject的 scaleX属性,或者使用BitmapMaterialTools功能类的
静态方法来翻转bitmap数据:BitmapMaterialTools.mirrorBitmapX( material.bitmap).
平铺材质使用 material.tiled = ***e并设置 material.maxU 和 material.maxV这两个
横线和纵向重复数.
【来源:互联网】
更多精彩教程,尽在web3D纳金网http://www.narkii.com/college/ |
|