您的位置:首页 > 产品设计 > 产品经理

Away3D实例教程 - 贴图(EnviroBitmapMaterial)

2009-06-01 22:33 302 查看
本篇包含内容:

3D基本元素-圆环
环境位图材质EnviroBitmapMaterial。

转载请注明出处:nooon.cnblogs.com

本例会用到的图片:







先看本例子最终效果:点击观看

从例子里我们看到,圆环反射环境里的金色光泽,但你细心观察可以发现不是真的实时反射。

再看完整代码(Flex):

package
{
importaway3d.cameras.HoverCamera3D;
importaway3d.containers.ObjectContainer3D;
importaway3d.containers.View3D;
importaway3d.core.math.Number3D;
importaway3d.core.utils.Cast;
importaway3d.materials.BitmapMaterial;
importaway3d.materials.EnviroBitmapMaterial;
importaway3d.primitives.Plane;
importaway3d.primitives.Sphere;
importaway3d.primitives.Torus;
importflash.display.Sprite;
importflash.events.Event;
importflash.events.MouseEvent;
[SWF(width="600",height="500",frameRate="60",backgroundColor="#FFFFFF")]
publicclassenviroBitmapMaterialextendsSprite
{
//定义变量
privatevarview:View3D;
privatevarcam:HoverCamera3D;
privatevarplaneMaterial:BitmapMaterial;
privatevartorusMaterial:EnviroBitmapMaterial;
privatevarplane:Plane;
privatevargroup:ObjectContainer3D;
privatevartorus:Torus;
privatevarmouseDown:Boolean;
privatevarlastMouseX:Number;
privatevarlastMouseY:Number;
privatevarlastPanangle:Number;
privatevarlastTiltangle:Number;
privatevarcameraSpeed:Number;
//嵌入图片,goldbackground.jpg用于背景及环境图;adobe_ico.jpg是圆环的皮肤
[Embed(source="resources/goldbackground.jpg")]privatevargoldImage:Class;
[Embed(source="resources/nooon.jpg")]privatevarskinImage:Class;
publicfunctionenviroBitmapMaterial()
{
//新建各贴图材质,备用。
createMaterial();
//inital3D
init3D();
//create3DScene
createScene();
//addLsitener
addEventListener(Event.ENTER_FRAME,update);
stage.addEventListener(MouseEvent.MOUSE_DOWN,m_down_h);
stage.addEventListener(MouseEvent.MOUSE_UP,m_up_h);
}
privatefunctioncreateMaterial():void
{
//背景的贴图材质为BitmapMaterial
planeMaterial=newBitmapMaterial(Cast.bitmap(newgoldImage()),{smooth:true,precision:5});
//圆环要反射环境,用EnviroBitmapMaterial
//EnviroBitmapMaterial构造函数EnviroColorMaterial(color:*,enviroMap:BitmapData,init:Object=null)
//第二个参数必须是BitmapData,用于设置反射环境图,本例与背景平面用同一张图goldBackground
torusMaterial=newEnviroBitmapMaterial(Cast.bitmap(newskinImage()),Cast.bitmap(newgoldImage()));
//设置EnviroBitmapMaterial的反射系数,数值为0~1,自行设定数值大小看看效果。
torusMaterial.reflectiveness=0.4;
//在这里顺便设置下后面要用到的一个参数cameraSpeed,这个参数影响:拖动鼠标是整个场景旋转速度。
cameraSpeed=.3;
};
privatefunctioninit3D():void
{
cam=newHoverCamera3D({focus:300});
cam.lookAt(newNumber3D(0,0,0));
cam.distance=900;
cam.panangle=cam.targetpanangle=30;
cam.tiltangle=cam.targettiltangle=15;
cam.mintiltangle=5;
view=newView3D({camera:cam,x:300,y:250});
addChild(view);
};
privatefunctioncreateScene():void
{
group=newObjectContainer3D();
//创建背景平面
plane=newPlane({material:planeMaterial,width:250,height:250,segmentsW:8,segmentsH:8});
//创建圆环
//radius:圆环总半径;tube:环的圆管半径
//所使用的材质为torusMaterial,它是EnviroBitmapMaterial
torus=newTorus({material:torusMaterial,radius:30,tube:20,segmentsR:15,segmentsT:12});
torus.y=55;
view.scene.addChild(group);
group.addChild(plane);
group.addChild(torus);
};
privatefunctionupdate(e:Event):void
{
if(mouseDown)
{
cam.targetpanangle=cameraSpeed*(stage.mouseX-lastMouseX)+lastPanangle;
cam.targettiltangle=cameraSpeed*(stage.mouseY-lastMouseY)+lastTiltangle;
};
torus.yaw(-1);
torus.pitch(-1);
torus.roll(-1);
cam.hover();
view.render();
};
privatefunctionm_down_h(e:MouseEvent):void
{
mouseDown=true;
lastMouseX=stage.mouseX;
lastMouseY=stage.mouseY;
lastPanangle=cam.targetpanangle;
lastTiltangle=cam.targettiltangle;
};
privatefunctionm_up_h(e:MouseEvent):void
{
mouseDown=false;
};
}
}


.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: