package { import base.Base; import flare.basic.Scene3D; import flare.basic.Viewer3D; import flare.core.Camera3D; import flare.core.Mesh3D; import flare.core.Pivot3D; import flare.core.Texture3D; import flare.loaders.Flare3DLoader; import flare.materials.Material3D; import flare.materials.Shader3D; import flare.materials.filters.ColorFilter; import flare.materials.filters.EnvironmentFilter; import flare.materials.filters.PlanarFilter; import flare.materials.filters.SpecularFilter; import flare.system.Input3D; import flash.display.BlendMode; import flash.events.Event; import flash.geom.Vector3D; [SWF(width=800,height=600)] public class CarDemo extends Base { //环境贴图 [Embed(source="env.jpg")] private var EnvMap:Class; private var envMap:Texture3D; //性感车模 [Embed(source="car.f3d",mimeType="application/octet-stream")] private var Car:Class; private var CarLoader:Flare3DLoader; private var car:Pivot3D; private var scene:Scene3D; //材质1 private var mat:Shader3D; //材质2 private var mat2:Shader3D; //车架 private var body:Pivot3D; public function CarDemo(info:String="车的Demo") { super(info); //创建场景,Viewer3D能响应鼠标 var scene:Scene3D=new Viewer3D(this); scene.registerClass(SpecularFilter); //设置摄像机 scene.camera=new Camera3D(); scene.camera.z=-1000; scene.camera.y=100; scene.clearColor=new Vector3D(0,0,0); //关掉默认灯光,因为我在场景中设置了个点光源 scene.defaultLight=null; //设置场景中最大点光源数 scene.lights.maxPointLights=2; //加载车模 CarLoader=new Flare3DLoader(Car); CarLoader.load(); //在场景中显示车模 scene.addChild(CarLoader); //加载环境贴图 envMap=scene.addTextureFromFile(new EnvMap); //获取车架的材质 matbody mat=scene.getMaterialByName("matbody") as Shader3D; //给车架材质加入环境贴图 var env:EnvironmentFilter=new EnvironmentFilter(envMap,BlendMode.MULTIPLY,1,EnvironmentFilter.PER_PIXEL); mat.filters.push(env); mat.build(); scene.addEventListener(Scene3D.UPDATE_EVENT,onUpdate); } protected function onUpdate(e:Event):void { if(Input3D.keyUp(Input3D.NUMBER_1)) { //创建新的材质 mat2=new Shader3D; //设定颜色 mat2.filters.push(new ColorFilter(int(0xCFC4C4))); //从原油的车架材质中获取高光(在studio中设定的) mat2.filters.push(mat.filters[1]); //mat2.filters.push(mat.filters[2]); //构建材质 mat2.build(); //获取车架 body=CarLoader.getChildByName("body") as Pivot3D; //给车架赋予新的材质 body.setMaterial(mat2); }else if(Input3D.keyUp(Input3D.NUMBER_2)) { mat2=new Shader3D; mat2.filters.push(new ColorFilter(int(0xB00000))); mat2.filters.push(mat.filters[1]); //mat2.filters.push(mat.filters[2]); mat2.build(); body=CarLoader.getChildByName("body") as Pivot3D; body.setMaterial(mat2); } else if(Input3D.keyUp(Input3D.NUMBER_3)) { mat2=new Shader3D; mat2.filters.push(new ColorFilter(int(0x161414))); mat2.filters.push(mat.filters[1]); mat2.filters.push(mat.filters[2]); mat2.build(); body=CarLoader.getChildByName("body") as Pivot3D; body.setMaterial(mat2); } } } }