flash 3d flash3d 研究所 pv3d 共享资源  | 经典范例  | 视频教程  | 友情链接  | 联系我们
登陆 | 注册  flash 3d 研究所
讨论区





最近更新:
● 无语瓶阁下在教程区里 回复“《超简易papervision3D基础 ...”(18:09:44)
● payday loan阁下在教程区里 回复“《pv3d, sandy, away3d...”(05:56:23)
● bad credit payday loan阁下在教程区里 回复“《超简易papervision3D基础 ...”(05:56:13)
浏览主题:关于3d坐标问题(有源码)

关于3d坐标问题(有源码)
小农 (2010-01-21 19:31:56)

按《鼠标获取空间坐标的基础 射线和平面相交》这教程做的.........
不知道是哪出了问题鼠标按下后得到的是摄像机位置的坐标...)。本人愚笨......希望高手能帮我解答!
package
{
 import flash.display.Sprite;
 import flash.events.Event;
 import flash.events.MouseEvent;
 import org.papervision3d.core.math.Plane3D;
 import org.papervision3d.core.math.Number3D;
 import org.papervision3d.cameras.FreeCamera3D;
 import org.papervision3d.view.Viewport3D;
 import org.papervision3d.render.BasicRenderEngine;
 import org.papervision3d.scenes.Scene3D;
 import org.papervision3d.objects.primitives.Sphere;
 import org.papervision3d.materials.WireframeMaterial;
 public class myMouse3D extends Sprite
 {
  private var camera:FreeCamera3D;
  private var scene:Scene3D;
  private var render:BasicRenderEngine;
  private var viewport:Viewport3D;
  //3d坐标变量
  private var plane3d:Plane3D;
  private var p1:Number3D;
  private var inters:Number3D;
  private var sphere:Sphere;
  public function myMouse3D ()
  {
   //----------------------4元素---------------------STAR
   viewport=new Viewport3D(800,600,false,true);
   addChild(viewport);
   camera=new FreeCamera3D();
   scene=new Scene3D();
   render=new BasicRenderEngine();
   //----------------------4元素---------------------END
   
   plane3d=new Plane3D();
   plane3d.setNormalAndPoint(new Number3D(0,1,0),new Number3D(50,0,50))
   
   sphere=new Sphere(new WireframeMaterial(0x00ff00));
   scene.addChild(sphere);
   
   stage.addEventListener (MouseEvent.MOUSE_DOWN,mousedown);
   stage.addEventListener(Event.ENTER_FRAME,EnterFrame);
  }
  private function mousedown (event:MouseEvent):void
  {
   p1=camera.unproject(viewport.containerSprite.mouseX,viewport.containerSprite.mouseY);
   p1=Number3D.add(p1,(new Number3D(camera.x,camera.y,camera.z)))
   inters=plane3d.getIntersectionLineNumbers(p1,(new Number3D(camera.x,camera.y,camera.z)));
   //sphere.x=inters.x;
   //sphere.z=inters.z;
   trace(inters.x+":"+inters.x+" inters")
   trace(camera.x+":"+camera.x+" camera");

  }
  private function EnterFrame(event:Event):void
  {
   render.renderScene(scene,camera,viewport);
   sphere.rotationX+=2;
  }
 }
}





flash 3d 研究所 小农
(2010-01-21 19:34:10)
是不是我漏掉了哪个步骤啊5555....

flash 3d 研究所 DDM君
(2010-01-21 19:54:29)
inters.x和camera.x现在结果是一样的吗?

flash 3d 研究所 小农
(2010-01-21 21:21:14)
恩 现在输出的结果都是一样的!

flash 3d 研究所 DDM君
(2010-01-22 13:59:16)
每帧都必须要重新计算一次哟, 这个代码没有每帧更新数据.

flash 3d 研究所 doo
(2010-01-22 16:13:51)
因为你所描述平面 plane3d 与 camera 是同一水平状态(cmaera的坐标是plane3d内的一点,), 因此通过camera的直线与plane3d产生交点的交点就是camera的坐标..(能看明白吧 - -!!!)..

或者你可以理解为camera无法与plane3d产生交点,所以你得不到交点坐标 .
(注:这种理解是错的)

例如你可以改动一下camera试试
camera.orbit(45, 270); //45度 鸟视 ^ ^!!!
这样camera 与 plane3d 就不在同一水平,就可以得到你想要的数据了

flash 3d 研究所 小农
(2010-01-22 18:29:50)
非常感谢楼上的!总算理解了.......!!!!!(就是摄像机的Y轴不能和plane3d的Y轴相等)
plane3d.setNormalAndPoint(new Number3D(0,1,0),new Number3D(50,0,50))
改为
plane3d.setNormalAndPoint(new Number3D(0,1,0),new Number3D(0,-50,0));




flash 3d 研究所 fate0729
(2010-08-27 13:00:01)
小弟我早上也看不明白。。。看到此贴之后泪奔中。。。
多谢楼上各位的解答。。。

flash 3d 研究所 DDM君
(2010-08-27 21:39:40)
呵呵,真是太好了~

flash 3d 研究所 stum
(2010-10-18 14:07:26)
請問一下屬性作用是???
setNormalAndPoint
getIntersectionLineNumbers

评论人:
邮   箱: (填入邮箱,博客地址均可)

内   容: (广告和垃圾内容可能会被删除,望理解)
链接地址

验证码:(为防止机器人骚扰,请麻烦输入验证码^_^)
  

(目前需登陆方可发表)


不想添加了