如何把Papervision3d物体加到 flex中(附 立方体例子)

编程入门 行业动态 更新时间:2024-10-19 04:30:09

如何把Papervision3d物体加到 flex中(附 <a href=https://www.elefans.com/category/jswz/34/1766054.html style=立方体例子)"/>

如何把Papervision3d物体加到 flex中(附 立方体例子)

本文介绍怎么在flex 项目中使用Pv3d 。

需要你对flex有一定的了解。


方法1 直接在mxml文件中加入Pv3D组件

 

1。下载pv3组件,(Papervision3d 最新源代码和swc库文件: / )

 

 

2。把Papervision3D_2.0.883.swc和header.swc加入工程。

 

3。源程序如下:

 

 

<?xml version="1.0" encoding="utf-8"?>
<mx:Application
    width="640"
    height="480"
    xmlns:mx=""
    layout="absolute"
    applicationComplete="applicationComplete()">
    <mx:Script>
        <![CDATA[
 
            import org.papervision3d.objects.primitives.Cube;
            import org.papervision3d.view.BasicView;
            import org.papervision3d.lights.PointLight3D;
            import org.papervision3d.materials.BitmapMaterial;
            import org.papervision3d.materials.shaders.PhongShader;
            import org.papervision3d.materials.shaders.ShadedMaterial;
            import org.papervision3d.materials.shaders.Shader;
            import org.papervision3d.materials.utils.MaterialsList;
           
           
            import org.papervision3d.core.utils.Mouse3D;
            import org.papervision3d.cameras.Camera3D;
            import org.papervision3d.view.layer.ViewportLayer;
            import org.papervision3d.objects.DisplayObject3D;
           
         private var myMouse3D:Mouse3D;

           
        [Embed(source="../assets/1.jpg")]
        private var frontAsset:Class;
       
        [Embed(source="../assets/2.jpg")]
        private var backAsset:Class;
       
        [Embed(source="../assets/4.jpg")]
        private var bottomAsset:Class;

        [Embed(source="../assets/5.jpg")]
        private var leftAsset:Class;

        [@Embed(source='../assets/6.jpg')]
        private var rightAsset:Class;

        [Embed(source="../assets/3.jpg")]
        private var topAsset:Class;
       
        private var light:PointLight3D;
        private var cube:MyCube;
        private var basicView:BasicView = new BasicView();
               
        private var materialsList:MaterialsList = new MaterialsList();
       
        private function applicationComplete():void
        {
            materialsList.addMaterial(createShadedMaterial( new frontAsset(),true ), "front");   
            materialsList.addMaterial(createShadedMaterial( new backAsset() ), "back");
            materialsList.addMaterial(createShadedMaterial( new bottomAsset() ), "bottom");           
            materialsList.addMaterial(createShadedMaterial( new leftAsset() ), "left");
            materialsList.addMaterial(createShadedMaterial( new rightAsset() ), "right");
            materialsList.addMaterial(createShadedMaterial( new topAsset() ), "top");
            //定义立方体
            cube = new MyCube(materialsList, 500, 500, 500, 5, 5, 5);
            basicView.scene.addChild(cube);
           
            Mouse3D.enabled = true;
               basicView.viewport.interactive=true;
               myMouse3D =this.basicView.viewport.interactiveSceneManager.mouse3D;
              
            this.stage.addEventListener(MouseEvent.MOUSE_WHEEL,onWheels);
            this.stage.addEventListener(MouseEvent.MOUSE_MOVE,onRenderTick);
          
            basicView.startRendering();
            pv3dPanel.rawChildren.addChild(basicView); //method #1
        }
           
        protected function onRenderTick(event:Event=null):void
        {
           
            cube.rotationY += (basicView.viewport.containerSprite.mouseX - cube.rotationY) * .1;
            cube.rotationX += (basicView.viewport.containerSprite.mouseY - cube.rotationX) * .1;
            basicView.renderer.renderScene(basicView.scene,basicView.camera, basicView.viewport);
        }
           
           
        private function createShadedMaterial(bitmap:Bitmap,precise:Boolean=false):ShadedMaterial
        {
            var bitmapMaterial:BitmapMaterial = new BitmapMaterial(bitmap.bitmapData,precise);
            bitmapMaterial.smooth=true;
            bitmapMaterial.interactive=true;
            var shader:Shader = new PhongShader(light, 0xffffff, 0x333333, 10, bitmap.bitmapData, bitmap.bitmapData);
            var shadedMaterial:ShadedMaterial = new ShadedMaterial(bitmapMaterial, shader);
           
            return shadedMaterial;
        }
       
       //滚动鼠标中间轮,进行缩放
       private function onWheels(event:MouseEvent):void
       {
               basicView.camera.moveForward(10*event.delta);
       }
     ]]>
    </mx:Script>

    <mx:Panel id="pv3dPanel" width="100%" height="100%">
        <mx:Label text="Label" id="testLabel"/>
    </mx:Panel>
</mx:Application>

 

4。运行效果如下:

 

 

 

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

根据方法1进行自定义,源程序略。

 

 

 

更多推荐

如何把Papervision3d物体加到 flex中(附 立方体例子)

本文发布于:2024-03-06 14:21:23,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1715534.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:立方体   物体   例子   Papervision3d   flex

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!