用鼠标在灰色的平面上 点点看:
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入本的好书,详细介绍了papervision 3D的使用
Papervision3D is a powerful real-time 3D engine for Flash. Papervision3D can take externally created 3D models and render them as Flash content, without requiring end-users to download or install an ...
Main8.cs 鼠标手型和更换贴图(两个询问率相当高的需求,提供一点简单的思路) Main9.cs 实时绘制物体贴图(简易鼠标三维空间的位置获取,和直接在模型上绘制贴图的思路) Main10.cs 改变绕旋轴和卡通材质(强迫一个...
这个是as3版本,如果有需要用as2版本的可以给我留言或者会用SVN的自己可以搞一个,哈. Papervision3D是一个基于ActionScript的开源项目,目的在于实现更加炫丽美观、功能强大的Flash 3D Web应用程序。尤其是去年...
Papervision3D 教程,pv3d,pv3d+Flex,pv3d中文帮助
Papervision3D_2.0.869.swc
NULL 博文链接:https://baixiaozhe.iteye.com/blog/319388
《Papervision3D+Essentials》中文翻译
使用papervision3d引擎做的7个实例源码
Papervision3D Essentials (PV3D)的中文版电子书及 书中实例源码下载 PV3D FLEX 三维渲染必备开源包
Papervision3D_2.1.932.swcPapervision3D_2.1.932.swcPapervision3D_2.1.932.swc
整理了Papervision3d的各方面资料,并且提供一个全景代码案例!
Papervision3D Essentials 中文版 翻译 第一章 docx格式
Papervision3D的api,这个帮助文档介绍各种包的使用,有利于快速学习3D
《Papervision3D Essentials》是一本最新的Papervision3D入门书,对学习 Papervision3D很有帮助。包括pv3d库和源码以及书中代码
希望对学习PV3D引擎的人提供点帮助。这是一pv3D的api电子书
papervision3D与Box2D结合应用实例
一个不错的Flash 3D引擎Papervisio3D,让你的flash从2D转化3D不再是难事.最新版本as3
Papervision3D 中文文档,同学们不好意思,这个资源收点儿分,哥,最近穷了,没有分了 下次有好资源的时候,哥,免费送给你们