上一篇測試了Papervision3D的基本用法,這次來測試貼圖,順便慶祝本站達到廢話一百篇。當然,我還沒摸到呼叫外部圖檔來當貼圖材質,先以匯入Flash裡的圖片當材質測試比較簡單。
步驟如下:
1. 先在繪圖軟體裡作好你的材質圖檔。
2. 匯入Flash元件庫。

3. 為每張圖片指定類別。在元件庫的圖片上按滑鼠右鍵->『連結』,然後勾選『匯出給ActionScript使用』,他會自動勾選並填入其他項目,然後按確定。每張圖都必須這樣設定。

執行結果:
原始碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import org.papervision3d.cameras.Camera3D; import org.papervision3d.objects.*; import org.papervision3d.materials.*; import org.papervision3d.scenes.MovieScene3D; public class CubeRotate extends Sprite { private var container: Sprite; private var scene: MovieScene3D; private var camera: Camera3D; private var myCube:DisplayObject3D; private var zoomFlag : String; public function CubeRotate() { // 建立主要容器 container = new Sprite; container.x = stage.stageWidth/2; container.y = stage.stageHeight/2; addChild( container ); // 將這個容器指定為3D場景 scene = new MovieScene3D( container ); // 建立像機物件 camera = new Camera3D(); camera.z = -300; camera.zoom = 3; // 定義貼圖材質 var bmMaterial1:BitmapAssetMaterial = new BitmapAssetMaterial("test01.jpg"); var bmMaterial2:BitmapAssetMaterial = new BitmapAssetMaterial("test02.jpg"); var bmMaterial3:BitmapAssetMaterial = new BitmapAssetMaterial("test03.jpg"); var bmMaterial4:BitmapAssetMaterial = new BitmapAssetMaterial("test04.jpg"); // 指定立方體各面的著色方式 var materiallist:MaterialsList = new MaterialsList(); materiallist.addMaterial(bmMaterial1,"top"); materiallist.addMaterial(bmMaterial2,"bottom"); materiallist.addMaterial(bmMaterial3,"front"); materiallist.addMaterial(bmMaterial4,"back"); materiallist.addMaterial(bmMaterial4,"left"); materiallist.addMaterial(bmMaterial4,"right"); // 建立立方體 myCube = new Cube(materiallist, 200, 180, 120, 1, 1, 1, "myCube"); // 在場景中加入剛剛建立的立方體 scene.addChild(myCube); // 將相機的目標指定到立方體 camera.target = myCube; // 設定zoom in或zoom out的旗標 zoomFlag = "forward"; // 註冊enterFrame的事件,每次觸發皆重繪制3D畫面 stage.addEventListener(Event.ENTER_FRAME, loop3d); } private function loop3d(event: Event): void { // 旋轉立方體 myCube.rotationX += 0.35; // 繪制場景 scene.renderCamera(camera); } } } |
這次沒有加入滑鼠互動。單純玩貼圖。

4 Responses