1: package
2: {
3: import away3d.cameras.HoverCamera3D;
4: import away3d.containers.View3D;
5: import away3d.core.utils.Cast;
6: import away3d.lights.DirectionalLight3D;
7: import away3d.materials.PhongBitmapMaterial;
8: import away3d.materials.Dot3BitmapMaterial;
9: import away3d.primitives.Cube;
10:
11: import flash.display.Sprite;
12: import flash.events.Event;
13: import flash.events.MouseEvent;
14: [SWF(width="500",height="500",frameRate="30", backgroundColor="#000000")]
15: public class normalMapping extends Sprite
16: {
17: private var view:View3D;
18: private var cam:HoverCamera3D;
19: private var cube:Cube;
20: private var doodle:Dot3BitmapMaterial;
21: private var originalmap:PhongBitmapMaterial;
22: private var light:DirectionalLight3D;
23:
24: private var mouseDown:Boolean;
25: private var lastMouseX:Number;
26: private var lastMouseY:Number;
27: private var lastPanangle:Number;
28: private var lastTiltangle:Number;
29: private var cameraSpeed:Number;
30:
31: [Embed(source="resources/doodle.jpg")] private var doodleImage:Class;
32: [Embed(source="resources/normalmap.png")] private var normalmapImage:Class;
33: public function normalMapping()
34: {
35: //初始3D世界(摄像机、视口。。)
36: init3D();
37: //创建场景里的3D模型(建一立方体用作涂鸦的墙体)
38: createSce();
39: //添加侦听器(监测鼠标拖动,如拖动则旋转摄像机;并且每帧渲染)
40: addEventListener(Event.ENTER_FRAME,update);
41: stage.addEventListener(MouseEvent.MOUSE_DOWN,m_down_h);
42: stage.addEventListener(MouseEvent.MOUSE_UP,m_up_h);
43: }
44: private function init3D():void
45: {
46: cam=new HoverCamera3D();
47: cam.distance=1200;
48: cam.panangle=cam.targetpanangle=30;
49: cam.tiltangle=cam.targettiltangle=0;
50: cam.mintiltangle=-90;
51: view=new View3D({camera:cam,x:250,y:250});
52: addChild(view);
53: };
54: private function createSce():void
55: {
56: //控制摄像机旋转速度
57: cameraSpeed=.3;
58: // 创建直线光源,Dot3BitmapMaterial需要光源。没有光源与普通的BitmapMaterial无异
59: var light:DirectionalLight3D = new DirectionalLight3D({brightness:1,ambient:0.25, diffuse:0.75, specular:0.9});
60: light.x = 5000;
61: light.z = -50000;
62: light.y = 1000;
63: view.scene.addChild(light);
64: //新建originalmap,是PhongBitmapMaterial类型,用作墙后方贴图
65: originalmap=new PhongBitmapMaterial(Cast.bitmap(new doodleImage()));
66: //新建doodle,是Dot3BitmapMaterial类型,用作墙前方贴图
67: doodle=new Dot3BitmapMaterial(Cast.bitmap(new doodleImage()),Cast.bitmap(new normalmapImage()),{smooth:true, precision:6});
68: //新建一立方体,用作墙体
69: cube=new Cube({width:600,height:300,depth:20,segmentsW:2,segmentsH:2});
70: //分别为墙体前后方贴图
71: cube.cubeMaterials.front=doodle;
72: cube.cubeMaterials.back=originalmap;
73:
74: view.scene.addChild(cube);
75: };
76: private function update(e:Event):void
77: {
78: if(mouseDown)
79: {
80: cam.targetpanangle=cameraSpeed*(stage.mouseX-lastMouseX)+lastPanangle;
81: cam.targettiltangle=cameraSpeed*(stage.mouseY-lastMouseY)+lastTiltangle;
82: };
83: cam.hover();
84: view.render();
85: };
86: private function m_down_h(e:MouseEvent):void
87: {
88: mouseDown=true;
89: lastMouseX=stage.mouseX;
90: lastMouseY=stage.mouseY;
91: lastPanangle=cam.targetpanangle;
92: lastTiltangle=cam.targettiltangle;
93: };
94: private function m_up_h(e:MouseEvent):void
95: {
96: mouseDown=false;
97: };
98: }
99: }
相关推荐
实例教程 - 贴图(Dot3BitmapMaterial) 实例教程 - 贴图(EnviroBitmapMaterial) 实例教程 - 贴图(texture mapping) 学习笔记 - away3d类库下载 学习笔记1 - 戏说Flash 三维引擎 学习笔记2-三维世界的四个基本...
dot3ui
dot3cfg
dot3api
dot3gpclnt
dot3hc
dot3dlg
dot3msm
dot3
dot3gpui
dot3ui.dll
dot3hc.dll
dot3cfg.dll
dot3gpclnt.dll
dot3api.dll
dot3msm.dll
Dot3Conn.dll
dot3svc.dll
dot3dlg.dll
dot3mm.dll