程序用到的兩張圖片,圖片大小必須是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/