`

如何把Papervision3d物体加到 flex项目中(附 旋转圆球例子)

阅读更多

本文介绍怎么在flex项目中使用Papervision3d,而不是在actionscript项目中。

(Papervision3d 最新源代码和swc库文件:http://code.google.com/p/papervision3d/ )

 本文参照:http://pv3d.org/2008/11/29/adding-a-basicview-to-a-flex-uicomponent/

方法一 直接在mxml文件中加入 3D 窗体组件

  代码:

 <?xml version="1.0" encoding="utf-8"?>
<mx:Application width="640" height="480" xmlns:mx="http://www.adobe.com/2006/mxml "  layout="absolute"
 applicationComplete="applicationComplete()">
 <mx:Script>
  <![CDATA[
   import org.papervision3d.objects.primitives.Sphere;
   import org.papervision3d.view.BasicView;
   private function applicationComplete():void
   {
    var basicView:BasicView = new BasicView(); //3D 窗体, 是一个 UIComponent
    var sphere:Sphere = new Sphere(null,200,16,16); //3D球体,属性依次是材质,半径,水平方向三角形数量,垂直方向三角形数量
    basicView.scene.addChild(sphere); //把球体加入到 3D 窗体中
    basicView.startRendering(); // 显示
    pv3dPanel.rawChildren.addChild(basicView); //把3D窗体加入到panel中
   }
  ]]>
 </mx:Script>
 <mx:Panel id="pv3dPanel" title="Papervision3D Panel" width="640" height="480"/>
</mx:Application>

运行效果:

 

代码分析:

   用BasicView创建一个3d球体还是很简单, 比老版简化了很多步骤。 这里需要注意的是“  pv3dPanel.rawChildren.addChild()” , 官方文档入下:

http://livedocs.adobe.com/flex/3_cn/mx/core/Container.html#rawChildren

 容器中通常包含子组件,可以使用 Container.getChildAt() 方法和 Container.numChildren 属性枚举这些子组件。此外,容器可以包含样式元素和外观,如边框和背景。Flash Player 和 AIR 创建的子组件和外观之间没有任何差异。二者均可以使用播放器的 getChildAt() 方法和 numChildren 属性进行访问。但是,Container 类通过覆盖 getChildAt() 方法和 numChildren 属性(以及其它多个方法)可造成容器的子项是唯一的子组件的错觉。

如果您需要访问容器的所有子项(内容子项和外观),则需使用 rawChildren 属性上的方法和属性,而不是常规 Container 方法。例如,可使用 Container.rawChildren.getChildAt()) 方法。但是,如果容器为其子项创建了 ContentPane Sprite 对象,则 rawChildren 属性值将只计算 ContentPane,而不计算容器的子项。并非总能够确定容器何时包含 ContentPane。

注意: 如果您调用 rawChildren 对象的 addChildaddChildAt 方法,则需在添加的组件上设置 tabEnabled = false 。这可以防止用户跳位到所添加的仅可视组件。

 

也可以写成这样:(不推荐)

<mx:Script>
  <![CDATA[
   import mx.core.UIComponent;
   use namespace mx_internal; 
   
   import org.papervision3d.objects.primitives.Sphere;
   import org.papervision3d.view.BasicView;
   private function applicationComplete():void
   {
    
    var basicView:BasicView = new BasicView();
    var sphere:Sphere = new Sphere(null,200,16,16);
    basicView.scene.addChild(sphere);
    basicView.startRendering();
    pv3dPanel.$addChild(basicView);  
   }
  ]]>
 </mx:Script>

 

代码下载:

http://dl.getdropbox.com/u/132579/sites/pv3d.org/flex/basics/FlexBasicView.zip



方法二:使用自定义控件,把3d窗体封装到自定义控件中, 在主应用中引入这个自定义控件。

 

主要代码:

 import flash.events.Event;
 
 import org.papervision3d.cameras.CameraType;
 import org.papervision3d.objects.primitives.Sphere;
 import org.papervision3d.view.BasicView;
 
 public class My3D extends BasicView
 {
  private var sphere:Sphere
  public function My3D()
  {
    super(400,300,false,true,CameraType.FREE);
     sphere = new Sphere(null,200,16,16);
        scene.addChild(sphere);
     startRendering();
  }
 /**
         * 加入每一帧的动作
         * @param event
         * 
   */
override protected function onRenderTick(event:Event=null):void
  {
   sphere.yaw(1);//球体绕Y轴旋转
   renderer.renderScene(scene, camera, viewport);
  }
 }


 


代码分析:

  其实就是把方法一封装一下,做一个自定义控件,用自定义控件来装载3d窗体,并把这个控件当作3d窗体的控制器, 然后把这个控件放到主应用中。


  另外,比方法一多了球体旋转效果, 代码在上面贴了。

 

代码下载: 见附件

 

3
0
分享到:
评论

相关推荐

    Papervision3D 教程打包下载

    9. **项目结构与组织**:学习如何组织代码和资源文件,以及如何将Papervision3D集成到现有的项目结构中,是成功开发3D应用的重要步骤。 10. **社区与资源**:Papervision3D拥有活跃的开发者社区,这个教程可能还...

    flex Papervision 3D 事例

    在Flex 3.0版本中,Papervision3D提供了一个灵活且高效的解决方案,将3D技术引入到富互联网应用程序(RIA)中。 标题"flex Papervision 3D 事例"表明这是一个具体的项目实例,包含了使用Flex和Papervision3D开发的...

    papervision3d_868.swc

    1. 引入PV3D库:在Flex项目中,将`papervision3d_868.swc`添加到库路径,并在主类中导入必要的PV3D类。 2. 创建3D场景:初始化一个`Scene3D`对象,作为3D图形的容器。 3. 创建3D物体:实例化一个`Box`对象,设置其...

    papervision3d拖拽圆球

    本篇文章将通过实例“拖拽圆球”来探讨Papervision3D如何实现3D场景中的用户交互,以及涉及到的相关技术要点。 一、Papervision3D 简介 Papervision3D 是基于Adobe Flash平台的一个3D引擎,它允许开发者创建复杂的...

    Papervision3D Essentials 中文PDF及书中源码

    Papervision3D是一个用于Adobe Flex和Flash平台的开源项目,它为Web开发人员提供了在浏览器中创建交互式3D图形的能力,极大地拓宽了Web应用的视觉表现力。 本书旨在详细介绍PV3D的基本概念和技术,帮助读者理解如何...

    初识Papervision3D

    在实际项目中,Papervision3D可以与Flex Builder或Flash Professional等开发工具结合使用,提供丰富的编程接口和调试工具。尽管Papervision3D是一个强大且灵活的库,但它也有一定的学习曲线,尤其是对于没有3D编程...

    Papervision3D-demo.rar_DEMO_Papervision3D demo_Papervision3D mxm

    《Papervision3D演示项目详解:七个实例深度剖析》 Papervision3D是一种基于Adobe Flash Platform的开源3D渲染引擎,它允许开发者在网页上创建复杂的3D场景和交互式应用。该技术的出现极大地拓宽了Flash的潜力,使...

    PaperVision3D

    通过PaperVision3D,开发者可以创建3D模型、纹理、灯光、相机视角等元素,并在舞台上进行动态操作,实现3D物体的旋转、缩放和移动,以及复杂的碰撞检测和物理模拟。 在PaperVision3D中,3D场景是由多个基本元素构成...

    Papervision3D.Essentials

    - **3D模型导入**: 学习如何将3D模型导入到Papervision3D中,包括常见的文件格式和支持的导入方法。 - **场景构建**: 探讨如何构建复杂的3D场景,包括灯光设置、材质贴图等关键要素。 - **动画与交互**: 分析如何...

    papervision3D

    Papervision3D是基于Adobe Flash和Flex平台的一个强大的三维(3D)图形渲染引擎。这个技术允许开发者在Web浏览器中创建出丰富的、交互式的3D场景,为用户提供了一种全新的网页体验。该框架利用ActionScript 3.0语言...

    《Papervision3D+Essentials》中文翻译

    《Papervision3D+Essentials》是一本专注于Papervision3D技术的权威指南,对于深入了解和掌握这个强大的3D图形库至关重要。Papervision3D(简称PV3D)是Flash平台上最早的3D渲染引擎之一,它为开发者提供了在Web...

    Papervision3D_API_Insomnia.rar_flex

    《Papervision3D API 详解:在Flex中的应用》 Papervision3D,作为一款强大的开源三维(3D)图形引擎,为Adobe Flex开发者提供了在Flash平台上构建三维交互式应用的能力。这个名为"Papervision3D_API_Insomnia.rar_...

    Papervision3D

    1. **准备工作**:首先需要下载Papervision3D的库文件并将其添加到项目中。原文推荐了一个名为“pv3d傻瓜包”的资源包,这个包包含了Papervision3D的核心库文件和其他辅助工具。 2. **创建项目**:在Flash CS3或CS4...

    FLEX + Papervision3D 所有资料

    flashplayer 11 播放器 Papervision3D -帮助文档 Papervision3D_2[1].1.920.swc Papervision3D源码例子 帮助文档 需要解锁 ,源码例子拷贝到新建工程的AS 类中,修改名称和类名就可以运行了。

    Papervision3D的API

    《Papervision3D API详解》 Papervision3D(PV3D)是Flash平台上的一款强大的3D图形库,它允许开发者在网页上创建丰富的、交互式的三维图形和应用程序。本篇文章将深入探讨Papervision3D的API,帮助读者理解并掌握...

Global site tag (gtag.js) - Google Analytics