用鼠标在灰色的平面上 点点看:
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);
}
}
分享到:
相关推荐
- **基础概念**:理解3D空间中的坐标轴(X、Y、Z轴)和物体的位置、旋转、缩放等基本属性。 - **图形创建**:学习如何在3D环境中创建和编辑形状,包括立方体、球体、平面等基本几何体。 - **动画制作**:掌握如何...
1. **基础概念**:了解3D坐标系,包括X、Y、Z轴以及如何在3D空间中定位和旋转物体。 2. **对象与场景**:掌握如何创建3D对象,如立方体、球体等,并将它们添加到场景中。 3. **摄像机**:学习如何设置和移动摄像机...
在Flex中实现3D效果,主要依赖于两个关键组件: mx:Canvas 和 spark:View3D。mx:Canvas 是早期Flex 3 SDK中的3D容器,而spark:View3D 是Flex 4(即Spark架构)引入的新3D容器,提供更先进的3D渲染功能。这两个组件...
2. Papervision3D或 Away3D:这是两个常用的Flash 3D库,提供了3D渲染、物体旋转、缩放等效果,是构建3D地球的基础。 3. XML解析:Flash内置了XML类库,可以方便地读取和解析XML文件,提取所需的城市数据。 4. 地理...