`

papervision3d 中的坐标(2)--获取鼠标的空间坐标的两个方法

UP 
阅读更多

用鼠标在灰色的平面上 点点看:

 

 

 public class PlaneSelect extends BasicView
 {
  private var mouse3D:Mouse3D;
 
 
  public function PlaneSelect()
  {
    super(600,600,false,true,CameraType.FREE);
   
     var frameMt:WireframeMaterial=new WireframeMaterial( 0x000000);//线框材质
     var colorMt:ColorMaterial=new ColorMaterial( 0xD3D2D0);//色块材质
    
     /*××××××××××××××××××××××××× */ /* 使用第二种方法时 必须设置的2属性*/
      colorMt.interactive=true;//让材质能够感知鼠标 以便获取鼠标在材质上点击的位置
       Mouse3D.enabled = true;
       mouse3D = viewport.interactiveSceneManager.mouse3D;/* 创建虚拟3d鼠标 */
     /*××××××××××××××××××××××××× */
    
     var floor:Plane = new Plane(colorMt, 1000, 1000, 10, 10);//地板
 
    
          
            scene.addChild(floor);
           
     camera.y = -400;//镜头在floor前下方
     camera.z=-600;//到floor的距离
     camera.lookAt(floor);//让镜头对准地板,而不是平视远方
   
    startRendering();
    
    /* 注册事件*/
     //addEventListener(MouseEvent.MOUSE_UP, removeDragListener);
           addEventListener(MouseEvent.MOUSE_DOWN, setDragListener);
  }
  

 
   private function setDragListener(evt:MouseEvent=null):void
    {
       //  var intersect:Number3D=getMousePointOnFloor();//使用方法一
         var intersect:Number3D=getMousePointOnFloor2();//使用方法二
        
        var materialsList:MaterialsList = new MaterialsList();
         materialsList.addMaterial(new  WireframeMaterial(0xf000000), "all"); //定义正方形所有面使用同一材质,也可以分别定义
     var cube:Cube = new Cube(materialsList,30,30,30);
   cube.position=intersect;//把方块的位置和鼠标位置设为相同
   cube.z=-10;
   scene.addChild(cube);
    }
   private function move3DMap(evt:MouseEvent=null):void{}
   private function removeDragListener(evt:MouseEvent=null):void
  {
  //   removeEventListener(MouseEvent.MOUSE_MOVE, move3DMap);
  }
 
 
  /**
   *鼠标的三维坐标 方法一
   * @return
   *
   */ 
  private function getMousePointOnFloor():Number3D {
   
     var ray:Number3D =  camera.unproject( viewport.containerSprite.mouseX,  viewport.containerSprite.mouseY);
         //创建一条镜头到鼠标的射线
        ray = Number3D.add(ray, camera.position);
        //通过三个点创建一个虚拟平面,其实就是建立一个和x轴y轴相交的平面
        var  plane3D:Plane3D  = Plane3D.fromThreePoints( new Number3D(0,100,0), new Number3D(100,0,0), new Number3D(0,0,0));
       //找到射线和平面的交点
        var intersect:Number3D = plane3D.getIntersectionLineNumbers(camera.position, ray);
        return intersect;
   }
  /**
   *鼠标的三维坐标 方法二, 大概的原理是获取鼠标在材质上点击的位置 
   * @return
   *
   */ 
  private function getMousePointOnFloor2():Number3D {
     return new Number3D(mouse3D.x,mouse3D.y,mouse3D.z);
     }
 
 }

 

5
0
分享到:
评论

相关推荐

    papervision 3D-20-alpha-great-while

    此标题表明了文档是关于Papervision 3D的一个版本介绍,即2.0 Alpha Great While版本。Papervision 3D是一款基于ActionScript 3.0的开源3D框架,它允许开发者在Adobe Flash平台上创建复杂的3D图形和动画。 #### ...

    papervision3d 中的坐标(1)--坐标系

    而在3D空间中,引入了第三条轴——Z轴,形成一个右手坐标系,其中X、Y、Z轴分别代表水平、垂直和深度方向。 在PaperVision3D中,坐标系统也遵循这样的规则。每个3D对象都有自己的本地坐标系,它们相对于父对象(或...

    Papervision3D.Essentials

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

    Papervision3D-demo.rar_DEMO_Papervision3D demo_Papervision3D mxm

    总的来说,"Papervision3D-demo.rar"提供的7个实例源码是一份宝贵的教育资源,无论你是初学者还是经验丰富的开发者,都能从中获得关于Papervision3D及其在实际应用中的深刻理解。通过亲手实践,你将能够驾驭这个强大...

    《Papervision3D+Essentials》中文翻译

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

    Papervision3D

    Papervision3D是一个基于ActionScript 3.0的开源库,专为在Adobe Flash平台上构建三维(3D)图形和应用程序而设计。它利用了Flash Player的硬件加速功能,使得在Web浏览器中实现复杂的3D场景成为可能。Papervision3D...

    Papervision3D 教程打包下载

    2. **3D对象和场景**:在Papervision3D中,3D对象是由多个基本形状(如立方体、球体、平面等)构建的,这些形状可以通过组合和变换形成复杂的几何结构。场景(Scene)是所有3D对象的容器,可以包含多个层次(Layers...

    PaperVision3D

    在PaperVision3D中,3D场景是由多个基本元素构成的。例如,"Scene"代表3D空间,是所有3D对象的容器;"Object3D"是场景中的实体,可以包含多个子对象;"Mesh"是3D几何形状,如立方体、球体等;"Material"定义了物体...

    《Papervision3D_Essentials》中文翻译

    - **创建第一个Papervision3D应用程序**:通过构建一个简单的3D场景来引导读者熟悉Papervision3D的工作流程,了解如何在Flash中创建和渲染3D对象。 - **基本概念**:介绍3D场景中的关键元素,如相机、灯光、材质和...

    papervision3d和物理引擎Box2DFlash的一个超酷且好玩的DEMO

    通过研究源码,学习者可以深入理解Papervision3D和Box2DFlash的集成方法,以及如何在实际项目中应用这些技术。对于想要提升Flash平台上3D和物理效果的开发者而言,这是一个极好的学习案例。 总的来说,Papervision...

    papervision3D与Box2D结合应用实例

    在三维Web开发领域,Papervision3D和Box2D是两个备受瞩目的库。Papervision3D是一个强大的ActionScript 3.0框架,用于构建富有交互性的3D场景,而Box2D则是一个物理引擎,专注于模拟真实世界的物理效果。这两者的...

    Papervision3D中文翻译

    通过学习,读者能够理解如何构建3D场景,添加物体,设置光照效果,以及如何利用Papervision3D库中的类和方法来实现各种3D功能。 "源码"标签提示我们,这本书不仅提供了理论知识,还附带了实际的代码示例。这些代码...

    Papervision3D的API

    例如,可以添加一个MouseCursor3D对象,使鼠标位置在3D空间中可见。 2. **Animation**: 通过修改Transform3D的属性或使用Tween类,可以实现对象的动画效果。例如,使用Tween类的start方法启动一个平移动画:`new ...

    papervision3d 精髓

    理解3D空间的概念,如坐标系、轴向、旋转和平移等,对于使用PV3D至关重要。书籍中通常会涵盖这些基础知识,并通过实例演示如何在PV3D中应用它们。 #### 3. **创建3D模型** PV3D支持多种3D模型格式,包括.obj和....

    papervision3D

    用户可以通过这个文件查阅Papervision3D的各种函数、类和方法,了解如何在自己的项目中使用它们。"README.txt"文件通常是项目或软件的说明文件,可能会包含安装指南、版本信息、版权信息或者开发者的重要说明。 ...

    papervision3D学习资料

    Papervision3D是一个基于ActionScript 3.0的开源库,用于在Adobe Flash平台上构建三维(3D)图形和交互式应用。这个技术在2006年由Carlos Ulloa创立,允许开发者在浏览器内创建引人入胜的3D体验,无需安装额外的插件...

Global site tag (gtag.js) - Google Analytics