- 最后登录
- 2013-9-29
- 注册时间
- 2012-8-20
- 阅读权限
- 90
- 积分
- 6371
- 纳金币
- 6372
- 精华
- 0
|
使用现有的flash player API能够实现三维旋转的地球,但是比较麻烦,主要使用的是flash player10新增加的绘图API drawTriangles,这里我使用Away3d来实现旋转的地球。
Away3d能使用多种材质,都在Away3d.materials.*包里面,这个包里面有不下20种材质,它能够使用位图、视频、外部swf文件以及线框等等来作为材质。而且在使用swf作为材质时,还能够保有其交互性,可以说是只有你想不到,没有你做不到。但是不同的材质对系统需求不同,毫无疑问,视频文件以及swf文件作为材质消耗系统资源要比位图、线框材质多一些,废话少说下面看代码(地球的贴图文件我会传上来,大家可以试试):
package
{
import away3d.cameras.HoverCamera3D;
import away3d.containers.View3D;
import away3d.core.utils.Cast;
import away3d.materials.BitmapMaterial;
import away3d.primitives.Sphere;
import flash.display.Sprite;
import flash.events.Event;
/**
* ...
* @author aisajiajiao
* 旋转的地球
*/
public class MaterialDemo extends Sprite
{
//这是我机器上的文件路径,在自己实验的时候一定要确保路径正确
[Embed(source="../assets/map.jpg")]
private var Earth:Class;
private var _view:View3D;
private var _camera:HoverCamera3D;
private var _sphere:Sphere;
private var _material:BitmapMaterial;
public function MaterialDemo()
{
//配置摄像机
_camera = new HoverCamera3D();
//Camera的仰角,单位度而非弧度,默认为0
_camera.tiltAngle = 10;
//Camera在y轴上的旋转角度,默认为0单位也是度
_camera.panAngle = 180;
//摄像头与指定目标之间的距离,默认是800
_camera.distance = 1000;
_view = new View3D();
_view.x = stage.stageWidth / 2;
_view.y = stage.stageHeight / 2;
_view.camera = _camera;
addChild(_view);
//使用Cast类将位图数据转化为BitmapData数据,Cast类是工具类,使用很方便实现各种数据之间的转化
//当然你可以使用原生的Bitmap类来获得BitmapData数据.
_material = new BitmapMaterial(Cast.bitmap(Earth));
_sphere = new Sphere();
_sphere.radius = 200;
//设置分段数
_sphere.segmentsH = 20;
_sphere.segmentsW = 20;
//设置材质,将地球贴图复制给球体
_sphere.material = _material;
//添加至舞台
_view.scene.addChild(_sphere);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(e:Event):void
{
//下面一句被注释掉了,它确保的是地球自身在旋转(自西向东转)
//_sphere.rotationY--;
//hover()函数在每一帧上刷新显示,使之产生动画,如果将其注释,则不会产生动画,大家可以试试
_camera.hover();
//根据鼠标的位置旋转地球
_camera.panAngle += (stage.mouseX - stage.stageWidth / 2)/60;
_view.render();
}
}
}
|
|