Away3D學習筆記之一:創建貼圖

 

  

程序用到的兩張圖片,圖片大小必須是2的n次方,否則提示:

Invalid bitmapData: Width and height must be power of 2 and cannot exceed 2048

具體可參考 bitmapData 源代碼

bitmapData構造函數

public function set bitmapData(value : BitmapData) : void
		{
			if (value == _bitmapData) return;

			if (!TextureUtils.isBitmapDataValid(value))
				throw new Error("Invalid bitmapData: Width and height must be power of 2 and cannot exceed 2048");

			invalidateContent();
			setSize(value.width, value.height);

			_bitmapData = value;

			setMipMap();
		}

 

首先創建  assets包,把需要的圖片copy到assets包下。

圖片添加後assets顯示如下:

 

源代碼:

package
{
	import away3d.cameras.Camera3D;
	import away3d.containers.ObjectContainer3D;
	import away3d.containers.Scene3D;
	import away3d.containers.View3D;
	import away3d.entities.Mesh;
	import away3d.materials.TextureMaterial;
	import away3d.primitives.PlaneGeometry;
	import away3d.primitives.SphereGeometry;
	import away3d.textures.BitmapTexture;
	
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.display.Stage3D;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Vector3D;
	
	[SWF(width="1024", height="768", frameRate="30", backgroundColor="#00AAAA")]
	public class Triaxe extends Sprite
	{
		private var view: View3D;
		private var camera: Camera3D;
		private var scene: Scene3D;
		private var group: ObjectContainer3D;
				
		//嵌入外部圖片資料
		[Embed( "assets/earth.jpg" )]
		private var EarthImage: Class;
		
		[Embed( "assets/checker.jpg" )]
		private var CheckerImage:Class;
		
		[Embed( "assets/away3d.jpg" )]
		private var Away3DImage: Class;
	
		public function Triaxe()
		{
			//TODO: implement function
			super();
			
			this.init();
		}
		
		private function init(): void
		{	
			trace( "init" );
			this.init3D();
			this.createScene();	
			
			this.addEventListener(Event.ENTER_FRAME, onEnterFrame);
			this.addEventListener(Event.RESIZE, onResize );
		}
		
		private function init3D(): void
		{
			trace( "createScene" );
			camera = new Camera3D();
			scene = new Scene3D();
			
			view = new View3D( scene, camera );
			view.antiAlias = 4;
			
			addChild( view );
		}
		
		
		private function createScene(): void
		{
		
			group = new ObjectContainer3D();
			scene.addChild( group );
			
			//創建一個地球模型
			this.createEarth();
			this.createAway3dNote();
		}
		
		private function createEarth(): void
		{
			var earthBitmap: BitmapTexture = new BitmapTexture( new EarthImage().bitmapData );
			var texture:TextureMaterial = new TextureMaterial( earthBitmap );
			
			var sphGeo: SphereGeometry = new SphereGeometry();
			var sphere: Mesh = new Mesh( sphGeo, texture );
			
			sphere.position = new Vector3D( 200, 0, 0 );
			
			//設置名字爲 earth, 以後可以通過這個名字來訪問地球
			sphere.name = "earth";
			
			trace( "sphere'name: " + sphere.name + "Position: " + sphere.position );			
			group.addChild( sphere );
			
		}
		
		private function createAway3dNote(): void
		{
			var away3dBitmap: BitmapTexture = new BitmapTexture( new Away3DImage().bitmapData );
			var texture: TextureMaterial = new TextureMaterial( away3dBitmap );
			
			var planeGeo: PlaneGeometry= new PlaneGeometry(200, 200, 10, 10, true );
			var away3dNote: Mesh = new Mesh( planeGeo, texture );
			
			away3dNote.pitch( -90 );
			away3dNote.name = "away3dnote";
			
			trace( "plane'name: " + away3dNote.name );			
			group.addChild( away3dNote );
		}
		
		
		private function onEnterFrame( evt: Event ):void
		{	
			group.roll( 2 );
//			group.pitch( 1 );
//			group.yaw( 1 );
			
			view.render();
		}
		
		
		private function onResize( evt: Event ): void
		{	
			
		}
		
	}
}


如果程序中TextureMatrial 使用的是 BtimapMatrial ,可能會提示3604:use texture composition instead of inheritance..

運行結果:

 

參考資料:

http://blog.tartiflop.com/2008/11/first-steps-in-away3d-part-3-texture-mapping/

http://away3d.com/forum/viewthread/2088/#6544

發佈了17 篇原創文章 · 獲贊 9 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章