`
sjkgxf7191
  • 浏览: 251709 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Away3D Lite:Others

阅读更多

使用TargetCamera:

// 将camera锁定住对象mesh
targetCamera = new TargetCamera3D(10, 100, mesh);
targetCamera.z = -1000;

// 给view赋值:新的camera
view.camera = targetCamera;
 

 

锁定摄像机视角:

override protected function onPreRender():void
{
	sphere1.x = 200*Math.sin(step);	
	step += 0.1;
	
	target = isLookAt? sphere0 : sphere1;
    // flash.display.DisplayObject.tranform.matrix3D.position
    // 一个保存显示对象在转换参照帧中的 3D 坐标 (x,y,z) 位置的 Vector3D 对象。
	camera.lookAt(target.transform.matrix3D.position);
}


遍历场景中的所有object:

protected override function onPreRender():void
{	
    // 继承关系 Sphere -> AbstractPrimitive -> Mesh -> Object3D -> flash.display.Sprite
	for each (var mesh:Mesh in scene.children) {
		mesh.rotationX++;
		mesh.rotationY++;
		mesh.rotationZ++;
	}
}
 

设置3D剪裁窗口大小:

// 如果你在代码里设置view.width与view.height不会报错,但不会起作用
private var clipping:RectangleClipping;
clipping = new RectangleClipping();
clipping.minX = -400;
clipping.minY = -300;
clipping.maxX = 400;
clipping.maxY = 300;

private var view:View3D;
view = new View3D();
view.clipping = clipping;
 

设置layer:(同PV3D中的viewportLayer)

// Plane
plane = new Plane(new BitmapFileMaterial("assets/earth.jpg"), 256, 128);
plane.bothsides = true;
plane.rotationX = 45;
plane.y = i*50 - 4*50/2;
scene.addChild(plane);

// Layer
var layer:Sprite = new Sprite();
view.addChild(layer);
// Object3D.layer:An optional layer sprite used to draw into inseatd of the default view.
plane.layer = layer;

// Event
plane.layer.addEventListener(MouseEvent.CLICK, onClick);

private function onClick(event:MouseEvent):void
{
	var layer:Sprite = event.target as Sprite;
	
    // 给layer添加滤镜
	if(layer.filters.length==0)
		layer.filters = [new GlowFilter(0xFF0000, 1, 4, 4, 16, 1)];
	else
		layer.filters = null;
}

 

Cast类使用:

// Cast:Helper class for casting assets to usable objects 
// Casts the given data value as a bitmapdata object.
// 将一个图片class转化成一个bitmapdata
shadeMaterial = new BitmapMaterial(Cast.bitmap(Shade));
// Casts the given data value as a material object.
// 将一个图片class转化成一个material对象
materialArray = [Cast.material(GreenPaint), Cast.material(RedPaint)];
 

创建DAE模型的两种方法:

// 方法一
private var collada:Collada;
private var loader:Loader3D;
private var model:Object3D;

collada = new Collada();
collada.scaling = 600;
collada.centerMeshes = true;

loader = new Loader3D();
loader.loadGeometry("assets/chameleon.dae", collada);
loader.addEventListener(Loader3DEvent.LOAD_SUCCESS, onSuccess);
scene.addChild(loader);

private function onSuccess(event:Loader3DEvent):void
{
	model = loader.handle;
}

// 方法二
[Embed(source="assets/mario_testrun.dae",mimeType="application/octet-stream")]
private var Charmesh:Class;

private var collada:Collada;
private var model1:ObjectContainer3D;

collada = new Collada();
collada.scaling = 10;
// parseGeometry:Parses 3d file data.
model1 = collada.parseGeometry(Charmesh) as ObjectContainer3D;
model1.materialLibrary.getMaterial("FF_FF_FF_mario1").material = material;
scene.addChild(model1);
 

DAE模型动画设置:

// 定义骨骼动画
private var skinAnimation:BonesAnimator;

// BonesAnimator 骨骼动画:hold the animation information for a bones animation imported from a collada object 
skinAnimation = model1.animationLibrary.getAnimation("default").animation as BonesAnimator;

// 动起来。。。
private function onEnterFrame(event:Event):void
{
    // Updates all channels in the animation with the given time in seconds. 
    skinAnimation.update(getTimer()*2/1000);
}
 

 

获取鼠标在3D场景中的坐标:

// scenePosition:The xyz coordinate at which the event occurred in global scene coordinates.
private function onMouseMove(e:MouseEvent3D):void {
	position.x = e.scenePosition.x;
	position.z = e.scenePosition.z;
} 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics