`
hje
  • 浏览: 288098 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

flex pv3d test

阅读更多
<?xml version="1.0" encoding="utf-8"?>
<mx:Application width="100%" height="100%" xmlns:mx="http://www.adobe.com/2006/mxml"  layout="absolute"
applicationComplete="applicationComplete()">
<mx:Script>
  <![CDATA[
  import org.papervision3d.objects.DisplayObject3D;
  import org.papervision3d.view.layer.ViewportLayer;
  import org.papervision3d.cameras.Camera3D;
  import org.papervision3d.objects.primitives.Plane;
  import org.papervision3d.materials.BitmapFileMaterial;
  import org.papervision3d.materials.WireframeMaterial;
  import org.papervision3d.materials.utils.MaterialsList;
  import org.papervision3d.objects.primitives.Cube;
  import org.papervision3d.core.utils.Mouse3D;
   import org.papervision3d.objects.primitives.Sphere;
   import org.papervision3d.view.BasicView;
   import mx.controls.Alert;
   private var sphere:Sphere;
   private var cube:Cube;
   private var cube2:Cube;
   private var basicView:BasicView;
   private var mouse3D:Mouse3D;
   private var plane:Plane;
   private var MyMouse3D:Mouse3D;
  
private var material:BitmapFileMaterial;
private var picTarget:String="pic/simple.jpg";
private var isOrbiting:Boolean=false;
private var previousMouseX:Number;
private var previousMouseY:Number;
    private var cameraPitch:Number=0;
    private var cameraYaw:Number=0;
    private var layer1:ViewportLayer;
private var layer2:ViewportLayer;
private var myMouse3D:Mouse3D;

   private function applicationComplete():void
   {
    basicView = new BasicView(1024,768,true,true,"Free"); //3D 窗体, 是一个 UIComponent
   
   
var frontMaterial:BitmapFileMaterial = new  BitmapFileMaterial("pic/front.jpg");
frontMaterial.smooth=true;
frontMaterial.interactive=true;
var backMaterial:BitmapFileMaterial = new BitmapFileMaterial("pic/back.jpg");
backMaterial.smooth=true;
backMaterial.interactive=true;
var leftMaterial:BitmapFileMaterial = new BitmapFileMaterial("pic/left.jpg");
leftMaterial.smooth=true;
leftMaterial.interactive=true;
var rightMaterial:BitmapFileMaterial = new BitmapFileMaterial("pic/right.jpg");
rightMaterial.smooth=true;
rightMaterial.interactive=true;
var topMaterial:BitmapFileMaterial = new BitmapFileMaterial("pic/top.jpg");
topMaterial.smooth=true;
topMaterial.interactive=true;
var bottomMaterial:BitmapFileMaterial = new BitmapFileMaterial("pic/bottom.jpg");
bottomMaterial.smooth=true;
bottomMaterial.interactive=true;

  /*   material=new BitmapFileMaterial(picTarget);
    material.doubleSided = true;//双面可见 */
var materialsList:MaterialsList = new MaterialsList();
materialsList.addMaterial(frontMaterial, "front");
materialsList.addMaterial(backMaterial, "back");
materialsList.addMaterial(leftMaterial, "left");
materialsList.addMaterial(rightMaterial, "right");
materialsList.addMaterial(topMaterial, "top");
materialsList.addMaterial(bottomMaterial, "bottom");
var insideFaces:int=Cube.ALL;
        var excludeFaces:int=Cube.NONE;

cube2 = new Cube(materialsList,50,50,50,8,8,8);

    cube = new Cube(materialsList,1024,2000,200,8,8,8,insideFaces,excludeFaces);
   
    material=new BitmapFileMaterial(picTarget);
    material.doubleSided = true;//双面可见
//width and height
var w:Number = 800;
var h:Number = 800;
//segmentsW and segmentsH
var sW:Number = 1;
var sH:Number = 1;
/* var initObject:Object = new Object();

initObject.x = 100;

initObject.rotationY = 30;

initObject.scaleZ = 20;

//Option #1 using initObject可选1使用initObject */
   plane= new Plane(material, w, h, sW, sH);

   // plane=new Plane(material,1000,500);
    //cube=new Cube(materialsList,600,600,600);
    sphere= new Sphere(null,100,20,20); //3D球体,属性依次是材质,半径,水平方向三角形数量,垂直方向三角形数量
   
   
   
    //basicView.scene.addChild(sphere); //把球体加入到 3D 窗体中
    basicView.scene.addChild(cube);
    basicView.scene.addChild(cube2);
    layer1=this.basicView.viewport.getChildLayer(cube); //解决破面的问题 
        layer2=this.basicView.viewport.getChildLayer(cube2); 
    cube2.y=-75;
   // basicView.scene.addChild(plane);
    myMouse3D=this.basicView.viewport.interactiveSceneManager.mouse3D;
    Mouse3D.enabled=true;
   
    basicView.startRendering(); // 显示
   
    pv3dPanel.rawChildren.addChild(basicView); //把3D窗体加入到panel中
    basicView.addEventListener(Event.ENTER_FRAME,onFrame);
   // mouse3D = basicView.viewport.interactiveSceneManager.mouse3D;/* 创建虚拟3d鼠标 */
   // basicView.addEventListener(MouseEvent.MOUSE_DOWN,onClick);
   Mouse3D.enabled = true;
   basicView.viewport.interactive=true;
       MyMouse3D =this.basicView.viewport.interactiveSceneManager.mouse3D;//.viewport.interactiveSceneManager.mouse3D;/* 创建虚拟3d鼠标 */
    //cube.x=600;
   //basicView.viewport.addEventListener(MouseEvent.MOUSE_MOVE,onMove);
  
   basicView.addEventListener(MouseEvent.MOUSE_WHEEL,onWheels);
   this.stage.addEventListener(MouseEvent.MOUSE_DOWN,testMouseDown);
   this.stage.addEventListener(MouseEvent.MOUSE_UP,onMouseUp);
  // basicView.addEventListener(MouseEvent.MOUSE_MOVE,testMouseMove);//onMouseMove
   //this.stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);
   this.stage.addEventListener(KeyboardEvent.KEY_UP,onKeyUp);
   }
   private function onMouseUp(event:MouseEvent):void
   {
   isOrbiting=false;
        //layer1=this.basicView.viewport.getChildLayer(cube);  
        //layer2=this.basicView.viewport.getChildLayer(cube2);
   }
   private function onMouseDown(event:MouseEvent):void
   {
   isOrbiting=true;
   previousMouseX=event.stageX;
   previousMouseY=event.stageY;
   //layer1.removeDisplayObject3D(cube);  
        //layer2.removeDisplayObject3D(cube2);
   }
   private function onWheels(event:MouseEvent):void
   {
   basicView.camera.moveForward(10*event.delta);
   }
   private function onKeyDown(event:KeyboardEvent):void
   {
   //Alert.show(event.keyCode.toString());
/*     if(event.keyCode==37)//左
   {
   cube2.x=cube2.x-10;
   basicView.camera.moveLeft(cube2.x);
   }else if(event.keyCode==39)//右
   {
   cube2.x=cube2.x+10;
   }else if(event.keyCode==38)//上
{
cube2.z=cube2.z+10;
}else if(event.keyCode==40)//下
{
cube2.z=cube2.z-10;
}  */
cube2.yaw(10);
cube2.moveForward(20);
//basicView.camera.lookAt(cube2); 

  
   }
   private function onKeyUp(event:KeyboardEvent):void
   {
      if(event.keyCode==37)//左
   {
  
   }else if(event.keyCode==39)//右
   {
  
   }else if(event.keyCode==38)//上
{

}else if(event.keyCode==40)//下
{


  
   }
   private function onMouseMove(event:MouseEvent):void
{
var differenceX:Number = event.stageX - previousMouseX;
var differenceY:Number = event.stageY - previousMouseY;
   

if(isOrbiting==true)
{
/* cameraPitch += differenceY;
cameraYaw += differenceX;

cameraPitch %= 360;
cameraYaw %= 360;

cameraPitch = cameraPitch > 0 ? cameraPitch : 0.0001;
cameraPitch = cameraPitch < 90 ? cameraPitch : 89.9999;

previousMouseX = event.stageX;
previousMouseY = event.stageY;
cube.yaw(cameraYaw); */
/* cube.pitch(
cube.rotationX */
//cube.pitch(cameraPitch);
//basicView.camera.orbit(cameraPitch,cameraYaw);
        // update the camera angles
        cameraPitch -= differenceY;
        cameraYaw -= differenceX;
        // limit the pitch of the camera
        if(cameraPitch <= 0)
        {
          cameraPitch = 0.1;
        } else if (cameraPitch >= 180)
        {
          cameraPitch = 179.9;
        }
        // reset the last mouse position
previousMouseX = event.stageX;
previousMouseY = event.stageY;
        // reposition the camera
        //basicView.camera.orbit(cameraPitch, cameraYaw);
       
       
}
}
private function onMove(evt:MouseEvent):void
{
     var OldX:int=basicView.viewport.width/2;
     var OldY:int=basicView.viewport.height/2;

    /*   if(-(basicView.viewport.mouseY-OldY)/1.5<80&&-(basicView.viewport.mouseY-OldY)/1.5>-80){
basicView.camera.rotationX=-(basicView.viewport.mouseY-OldY)/1.5;
     }  */
// basicView.camera.rotationX=(basicView.viewport.mouseY-OldY)/1.25;
if(isOrbiting==true)
{
       basicView.camera.rotationY=(basicView.viewport.mouseX-OldX)/1.25;
}
     // basicView.camera.lookAt(sphere);
}
private function onMove2(event:MouseEvent):void
{
var rotX:Number = (stage.mouseX-(stage.stageWidth / 2))*(0.08)-90;
var rotY:Number = (stage.mouseY-(stage.stageHeight / 2))*(0.08)+90;
basicView.camera.orbit(-rotY, -rotX);


}
private function testMouseDown(event:MouseEvent):void
{
/* var distance:Number=cube2.x-myMouse3D.x;
Alert.show(distance.toString());
if(distance<0)
{

cube2.moveForward(distance);
} */

if(timer!=null)
{
timer.stop();
}
var dx:Number= myMouse3D.x - cube2.x;//物体旋转+移动
var dz:Number =  myMouse3D.z- cube2.z;
cube2.rotationY = Math.atan2(dx, dz) * 180 / Math.PI;
//cube2.moveForward(30);
var lastMousex:Number=myMouse3D.x;
var lastMousez:Number=myMouse3D.z;
ObjectMove(cube2,lastMousex,lastMousez);
/* var rotX:Number = (stage.mouseX-(stage.stageWidth / 2))*(0.08)-90;
var rotY:Number = (stage.mouseY-(stage.stageHeight / 2))*(0.08)+90;
basicView.camera.orbit(-rotY, -rotX);  */
}
private var timer:Timer;
private function ObjectMove(objectId:DisplayObject3D,lastMousex:Number,lastMousez:Number):void
{
if(timer!=null)
{
timer.removeEventListener(TimerEvent.TIMER,timerHander);
timer=null;
}
timer=new Timer(25,0);
timer.start();
timer.addEventListener(TimerEvent.TIMER,timerHander);
function timerHander(event:TimerEvent):void
{
var dx:Number=Math.abs( lastMousex- objectId.x);
var dz:Number = Math.abs(lastMousez- objectId.z);
if(dx<=2 && dz<=2)
{
objectId.x=lastMousex;
objectId.z=lastMousez;
timer.removeEventListener(TimerEvent.TIMER,timerHander);
timer=null;
}else
{
objectId.moveForward(2);
}
}
}

   private function onFrame(event:Event):void
   {
  sphere.rotationX++;
  /*cube.rotationX++;
   cube.rotationY++;
   cube.rotationZ++; */
  
   //plane.rotationX++;
  
   //plane.rotationY++;
   //plane.rotationY++;
  
   /* basicView.camera.rotationX++;
   basicView.camera.rotationY++;
   basicView.camera.rotationZ++; */ 
   //basicView.camera.z=-500;
   //basicView.camera.rotationX=MyMouse3D.x;
   //basicView.camera.rotationY=MyMouse3D.y;
   //basicView.camera.rotationZ=MyMouse3D.z;
  
   //basicView.camera.rotationY++;
   //basicView.cameraAsCamera3D.rotationX++; // 显示
   //basicView.camera.rotationX++;
  
   //basicView.camera.y++;
   //cube.rotationY++;
   //basicView.camera.lookAt(sphere,null);
   }
  ]]>
</mx:Script>
<mx:Panel id="pv3dPanel" title="Papervision3D Panel" width="100%" height="100%" backgroundColor="#E0BF0B">
  <mx:Label text="Label" id="labels"/>
</mx:Panel>
</mx:Application>
分享到:
评论

相关推荐

    flex pv3d 照片浏览 照片墙

    标题中的“flex pv3d 照片浏览 照片墙”指的是使用Adobe Flex技术结合PV3D库开发的一款3D照片浏览应用,它创建了一种类似照片墙的展示效果,让用户能够以三维视角来查看和浏览照片。这种技术在Web前端开发中常用于...

    flex全景pv3d

    flex全景as库。直接更改路径就能使用,非常方便,并且欢迎研究全景的同行加好友一起研究技术,多交流!

    Demo.rar_3d_flex_flex Graphic._pv3d flex_pv3d fl

    标题 "Demo.rar_3d_flex_flex Graphic._pv3d flex_pv3d fl" 提供的信息表明,这个压缩包包含了一个与3D图形相关的Flex应用程序的演示,使用了PV3D库。描述中提到“利用PV3D做的flex DEMO 实现了#3D特效”,进一步...

    用于flash中的PV3D 组件包

    在给定的“用于flash中的PV3D组件包”中,我们将探讨PV3D(Papervision3D)如何与Flex结合,以及如何利用它来创建震撼的3D效果。 PV3D是Adobe Flash平台上的一款强大的3D引擎,它为开发者提供了在Flash Player中...

    Luminex Flexmap 3D液相芯片系统的应用及使用维护技巧.pdf

    Luminex Flexmap 3D液相芯片系统是由美国Luminex公司推出的基于Flexmap3D技术(流式荧光技术)的超高通量检测系统。该系统运用荧光编码微球、激光检测技术和计算机算法,实现了对多因子的高通量检测。它广泛应用于...

    pv3d安装,简单运用的实例

    在安装PV3D之前,你需要确保已经安装了Adobe Flex SDK和Flash Player,因为PV3D是基于ActionScript 3.0开发的,与Flash平台紧密相连。你可以通过官方网站下载这些工具。安装PV3D库时,通常是将下载的库文件添加到...

    pv3d+flex 自写例子

    在本文中,我们将深入探讨如何将Flex与PV3D结合使用,通过一个自编的示例来阐述这一技术的应用。PV3D(PaperVision3D)是一个强大的3D图形库,它为Adobe Flex应用程序提供了丰富的三维渲染能力。而Flex则是一种基于...

    PV3D源码包(1.5版本和1.7版本)

    Papervision3D(PV3D)是Flex平台上的一个开源3D引擎,它为Adobe Flash和Flex应用程序提供了强大的3D图形渲染能力。在本文中,我们将深入探讨PV3D 1.5版本和1.7版本的源码,解析其核心概念,帮助开发者更好地理解和...

    pv3d最新资源包

    5. **兼容性**:PV3D与Flex和ActionScript 3.0紧密集成,使得具备AS3编程经验的开发者能够快速上手。 在这个资源包中,可能包含以下内容: - **库文件**:PV3D的核心库,如`pv3d.swc`,开发者可以将其导入到他们的...

    pv3d简单全景

    PV3D(Papervision3D)是ActionScript 3 (AS3)的一个开源库,专门用于在Adobe Flash Player环境中创建3D图形和交互式应用程序。本项目“pv3d简单全景”显然是使用PV3D库来构建一个基本的全景体验,下面我们将详细...

    PV3D的SWC、AS文件和英文API

    在实际开发中,首先需要在Flash IDE或Flex Builder中导入PV3D的SWC库。然后,你可以创建一个`Scene3D`对象作为3D场景的基础,接着可以添加`Camera3D`来控制视角,使用`View3D`来显示场景。接下来,可以创建`Object3D...

    flex开源3D地图

    Flex开源3D地图是一种基于Adobe Flex技术的三维地图应用程序,它允许开发者构建交互式的、具有丰富视觉效果的3D地理信息系统。Flex是一个用于构建富互联网应用程序(RIA)的开源框架,它基于ActionScript编程语言和...

    flex 3D 例子及3D资源包

    Flex 3D是一种基于Adobe Flash Platform的开源框架,用于创建具有丰富三维(3D)图形效果的Web应用程序。这个框架允许开发者使用ActionScript 3.0编程语言来构建交互式的、高性能的3D用户界面。Flex 3D的全称是...

    flex3d效果展示

    Flex3D,全称为Adobe Flex 3D,是Adobe Flex框架的一个扩展,它允许开发者创建具有强大三维(3D)视觉效果的富互联网应用程序(RIA)。这个技术在2000年代中期非常流行,尤其在需要展示复杂数据或提供动态交互体验的...

    fireball_pv3d

    “.project”是Eclipse或Flex Builder项目的配置文件,“deploy”可能是发布目录,“.settings”存储了项目的编译和构建设置,“src”包含了源代码,“lib”包含外部依赖库,比如PV3D库本身。 6. 开发流程:在开发...

    pv3d加入Flex控件及创建热点(附部分代码)

    ### pv3d加入Flex控件及创建热点:深入解析与代码示例 #### 一、pv3d与Flex控件的结合:实现交互式3D场景 在Flash平台的辉煌时期,Papervision3D(简称pv3d)作为一款强大的3D引擎,为开发者提供了构建丰富3D体验...

    flex 超强3D Demo,令人震撼!

    标题中的“flex 超强3D Demo,令人震撼!”是指使用Adobe Flex技术构建的一个具有强烈视觉冲击力的三维演示程序。Flex是一个基于ActionScript和Flash Player的开源框架,主要用于开发富互联网应用程序(RIA)。这个...

    PV3d Papervision3d API文档+学习笔记+全景案例

    《PV3d Papervision3D API文档与全景案例解析》 Papervision3D(PV3D)是一款强大的开源3D图形引擎,专为Adobe Flash平台设计,支持ActionScript 3.0(AS3),是Flash AS3中实现3D效果的重要工具。在本文中,我们将...

    PV3D 黄色星球

    PV3D,全称为 Papervision3D,是一种基于Adobe Flex和ActionScript 3.0的开源三维图形渲染引擎。它为Flash平台提供了强大的3D图形处理能力,允许开发者在网页上创建交互式、高性能的3D应用。黄色星球项目可能是一个...

Global site tag (gtag.js) - Google Analytics