您的位置:首页 > 其它

Away3D学习笔记之一:创建贴图

2012-06-04 12:07 309 查看




程序用到的两张图片,图片大小必须是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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: