用鼠标在灰色的平面上 点点看:
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);
}
}
分享到:
相关推荐
此标题表明了文档是关于Papervision 3D的一个版本介绍,即2.0 Alpha Great While版本。Papervision 3D是一款基于ActionScript 3.0的开源3D框架,它允许开发者在Adobe Flash平台上创建复杂的3D图形和动画。 #### ...
而在3D空间中,引入了第三条轴——Z轴,形成一个右手坐标系,其中X、Y、Z轴分别代表水平、垂直和深度方向。 在PaperVision3D中,坐标系统也遵循这样的规则。每个3D对象都有自己的本地坐标系,它们相对于父对象(或...
- **3D模型导入**: 学习如何将3D模型导入到Papervision3D中,包括常见的文件格式和支持的导入方法。 - **场景构建**: 探讨如何构建复杂的3D场景,包括灯光设置、材质贴图等关键要素。 - **动画与交互**: 分析如何...
总的来说,"Papervision3D-demo.rar"提供的7个实例源码是一份宝贵的教育资源,无论你是初学者还是经验丰富的开发者,都能从中获得关于Papervision3D及其在实际应用中的深刻理解。通过亲手实践,你将能够驾驭这个强大...
《Papervision3D+Essentials》是一本专注于Papervision3D技术的权威指南,对于深入了解和掌握这个强大的3D图形库至关重要。Papervision3D(简称PV3D)是Flash平台上最早的3D渲染引擎之一,它为开发者提供了在Web...
Papervision3D是一个基于ActionScript 3.0的开源库,专为在Adobe Flash平台上构建三维(3D)图形和应用程序而设计。它利用了Flash Player的硬件加速功能,使得在Web浏览器中实现复杂的3D场景成为可能。Papervision3D...
2. **3D对象和场景**:在Papervision3D中,3D对象是由多个基本形状(如立方体、球体、平面等)构建的,这些形状可以通过组合和变换形成复杂的几何结构。场景(Scene)是所有3D对象的容器,可以包含多个层次(Layers...
在PaperVision3D中,3D场景是由多个基本元素构成的。例如,"Scene"代表3D空间,是所有3D对象的容器;"Object3D"是场景中的实体,可以包含多个子对象;"Mesh"是3D几何形状,如立方体、球体等;"Material"定义了物体...
- **创建第一个Papervision3D应用程序**:通过构建一个简单的3D场景来引导读者熟悉Papervision3D的工作流程,了解如何在Flash中创建和渲染3D对象。 - **基本概念**:介绍3D场景中的关键元素,如相机、灯光、材质和...
通过研究源码,学习者可以深入理解Papervision3D和Box2DFlash的集成方法,以及如何在实际项目中应用这些技术。对于想要提升Flash平台上3D和物理效果的开发者而言,这是一个极好的学习案例。 总的来说,Papervision...
在三维Web开发领域,Papervision3D和Box2D是两个备受瞩目的库。Papervision3D是一个强大的ActionScript 3.0框架,用于构建富有交互性的3D场景,而Box2D则是一个物理引擎,专注于模拟真实世界的物理效果。这两者的...
通过学习,读者能够理解如何构建3D场景,添加物体,设置光照效果,以及如何利用Papervision3D库中的类和方法来实现各种3D功能。 "源码"标签提示我们,这本书不仅提供了理论知识,还附带了实际的代码示例。这些代码...
例如,可以添加一个MouseCursor3D对象,使鼠标位置在3D空间中可见。 2. **Animation**: 通过修改Transform3D的属性或使用Tween类,可以实现对象的动画效果。例如,使用Tween类的start方法启动一个平移动画:`new ...
理解3D空间的概念,如坐标系、轴向、旋转和平移等,对于使用PV3D至关重要。书籍中通常会涵盖这些基础知识,并通过实例演示如何在PV3D中应用它们。 #### 3. **创建3D模型** PV3D支持多种3D模型格式,包括.obj和....
用户可以通过这个文件查阅Papervision3D的各种函数、类和方法,了解如何在自己的项目中使用它们。"README.txt"文件通常是项目或软件的说明文件,可能会包含安装指南、版本信息、版权信息或者开发者的重要说明。 ...
Papervision3D是一个基于ActionScript 3.0的开源库,用于在Adobe Flash平台上构建三维(3D)图形和交互式应用。这个技术在2006年由Carlos Ulloa创立,允许开发者在浏览器内创建引人入胜的3D体验,无需安装额外的插件...