papervision3d 的一个例子

      Flash学习笔记 2008-8-9 18:12

向 Lee Brimelow 致敬,下面的这个例子来自他的博客,原文地址: http://theflashblog.com/?cat=13&paged=2

代码如下,需要用到pv3d 1.5 版的库文件。将代码放在场景中,库中放置图片,类名称设为 dzxz .

import org.papervision3d.scenes.*;
import org.papervision3d.cameras.*;
import org.papervision3d.objects.*;
import org.papervision3d.materials.*;
 
// Create the container sprite 创建容器对象
var con:Sprite = new Sprite();
con.x = stage.stageWidth * 0.5;
con.y = stage.stageHeight * 0.5;
addChild(con);
 
// Setup the scene 设置场景
var scene:Scene3D = new Scene3D(con);
var cam:Camera3D = new Camera3D();
cam.zoom = 4;
 
// Create camera center 设置相机(视角)
var pc:Plane = new Plane();
pc.visible = false;
cam.target = pc;
 
// Spiral properties 螺旋形状的参数
var num:int = 100; //图片的总数
var numOfRotations:Number = 5; //旋转的步长
var anglePer:Number = ((Math.PI*2) * numOfRotations) / num; //每一张图片的角度差
var yPos:Number = 0; //垂直方向上的间隔
 
// Create the planes
var pa:Array = new Array();
for(var i:uint=0; i<num ; i++)
{
    var cm:BitmapAssetMaterial = new BitmapAssetMaterial("dzxz"); //载入库中的一张图片
    cm.oneSide = false; //双面可见
    var p:Plane = new Plane(cm, 100, 100);
    p.x = Math.cos(i * anglePer) * 550; //在x z 轴构成的平面上以圆形分布
    p.z = Math.sin(i * anglePer) * 550; //
    p.y = yPos += 50; //y 方向上的间隔
    p.rotationY = (-i*anglePer) * (180/Math.PI) + 270;
    scene.addChild(p);
}
 
// Create the render loop
addEventListener(Event.ENTER_FRAME, render);
 
var angle:Number = 0;
 
function render(e:Event):void
{
    var dist:Number = ((stage.mouseY) - stage.stageHeight * 0.5) * -0.1;
    var dist2:Number = ((stage.mouseX) - stage.stageWidth * 0.5) * 0.0005;
    angle += dist2; //相机的旋转角度
    cam.x = Math.cos(angle) * 1000;
    cam.z = Math.sin(angle) * 1000;
    cam.y += dist; //相机上下移动
    if(cam.y <369) cam.y = 369; //下边界
    if(cam.y> 4755) cam.y = 4755; //上边界
    pc.y = cam.y; //视角和相机一样,同步提升
    scene.renderCamera(cam);
}

该段代码首先让图片在空间进行分布,然后让相机根据鼠标位置进行旋转和上下移动,代码简洁明快,给人一种平实的感觉。

标签集:TAGS:pv3d 示例 as3
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}