3d坐标转2d坐标2

今天看到 Matrix3D.transformVectors,终于明白了昨天的问题的解决办法.

假设有一个3d场景 scene, 里面有一个房子 room, 房子里有一个点 p, 3d场景 scene 里有一个摄像机 camera.

scene,room,camera都有各自的坐标系统.

现在的目的是把 p 显示到 camera 的底片 screen 上.

具体步骤就是:首先是把 p 点转换到 scene 的坐标系上描述, 再转换到 camera 的坐标系上描述, 再转换到 screen 上描述.

举例说明:

scene,room,camera都有各自的坐标系统,例如分别叫: sceneM,roomM,cameraM.

sceneM 是最外面的坐标系统,用一个 单位 Matrix3D 对象 表示:

var sceneM:Matrix3D=new Matrix3D(Vector.([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]));然后假定 room 在 scene 的 (10,20,30) 坐标处:

var roomM:Matrix3D=new Matrix3D(Vector.([1,0,0,0,0,1,0,0,0,0,1,0,10,20,30,1]));然后假定 p 在 room 的 (40,50,60) 坐标处:

var p:Vector3D=new Vector3D(40,50,60);然后假定 camera 在 scene 的 (0,0,-1000) 坐标处:

var cameraM:Matrix3D=new Matrix3D(Vector.([1,0,0,0,0,1,0,0,0,0,1,0,0,0,-1000,1]));p 在 room 中描述是 (40,50,60);

在 scene 中描述,就变成了 (10+40,20+50,30+60);

在 camera 中描述,就变成了 (10+40,20+50,30+60+1000);

如果用 Matrix3D 来转换,就是:

trace("p="+p);//p=Vector3D(40, 50, 60)p=roomM.transformVector(p);trace("p="+p);//p=Vector3D(50, 70, 90)cameraM.invert();p=cameraM.transformVector(p);trace("p="+p);//p=Vector3D(50, 70, 1090)如果把 roomM 和 cameraM 合起来,可以只调用一次 transformVector :var m:Matrix3D=roomM.clone();cameraM.invert();m.append(cameraM);//合起来p=m.transformVector(p);trace("p="+p);//p=Vector3D(50, 70, 1090)然后假定 screen 在 camera 前面 500 处,画图分析:

得知转到 screen 上的点应该是: ((50/1090)*500,(70/1090)*500)var dScreen:Number=500;var k:Number=dScreen/p.z;var screenX:Number=p.x*k;var screenY:Number=p.y*k;trace(screenX,screenY);//22.[1**********]376 32.[1**********]927源文件下载

再来个复杂点的效果,有大,中,小三个立方体,大的在自转,中的在绕着大的转,小的在绕着中的转:

源文件下载:

cubes.rar

今天看到 Matrix3D.transformVectors,终于明白了昨天的问题的解决办法.

假设有一个3d场景 scene, 里面有一个房子 room, 房子里有一个点 p, 3d场景 scene 里有一个摄像机 camera.

scene,room,camera都有各自的坐标系统.

现在的目的是把 p 显示到 camera 的底片 screen 上.

具体步骤就是:首先是把 p 点转换到 scene 的坐标系上描述, 再转换到 camera 的坐标系上描述, 再转换到 screen 上描述.

举例说明:

scene,room,camera都有各自的坐标系统,例如分别叫: sceneM,roomM,cameraM.

sceneM 是最外面的坐标系统,用一个 单位 Matrix3D 对象 表示:

var sceneM:Matrix3D=new Matrix3D(Vector.([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]));然后假定 room 在 scene 的 (10,20,30) 坐标处:

var roomM:Matrix3D=new Matrix3D(Vector.([1,0,0,0,0,1,0,0,0,0,1,0,10,20,30,1]));然后假定 p 在 room 的 (40,50,60) 坐标处:

var p:Vector3D=new Vector3D(40,50,60);然后假定 camera 在 scene 的 (0,0,-1000) 坐标处:

var cameraM:Matrix3D=new Matrix3D(Vector.([1,0,0,0,0,1,0,0,0,0,1,0,0,0,-1000,1]));p 在 room 中描述是 (40,50,60);

在 scene 中描述,就变成了 (10+40,20+50,30+60);

在 camera 中描述,就变成了 (10+40,20+50,30+60+1000);

如果用 Matrix3D 来转换,就是:

trace("p="+p);//p=Vector3D(40, 50, 60)p=roomM.transformVector(p);trace("p="+p);//p=Vector3D(50, 70, 90)cameraM.invert();p=cameraM.transformVector(p);trace("p="+p);//p=Vector3D(50, 70, 1090)如果把 roomM 和 cameraM 合起来,可以只调用一次 transformVector :var m:Matrix3D=roomM.clone();cameraM.invert();m.append(cameraM);//合起来p=m.transformVector(p);trace("p="+p);//p=Vector3D(50, 70, 1090)然后假定 screen 在 camera 前面 500 处,画图分析:

得知转到 screen 上的点应该是: ((50/1090)*500,(70/1090)*500)var dScreen:Number=500;var k:Number=dScreen/p.z;var screenX:Number=p.x*k;var screenY:Number=p.y*k;trace(screenX,screenY);//22.[1**********]376 32.[1**********]927源文件下载

再来个复杂点的效果,有大,中,小三个立方体,大的在自转,中的在绕着大的转,小的在绕着中的转:

源文件下载:

cubes.rar


相关文章

  • 新北师大八年级上册数学 第三章位置与坐标 教案
  • ●课 题: 3.1. 确定位置 ●教学目标: (一) 知识与技能: 理解用一对数表示物体在平面内所在的位置,灵活运用不同的方式确定物体的位置: (二) 过程与方法: 经历在现实生活中确定物体位置的过程,感受确定物体位置的多种方法: (三) ...查看


  • 知识点164 坐标确定位置(选择)
  • 知识点164 坐标确定位置(选择) 1. (2011•怀化)如图,若在象棋盘上建立直角坐标系,使"帅"位于点(-1,-2)."馬"位于点(2,-2),则"兵"位于点( ) A .( ...查看


  • 平面直角坐标系教案 1
  • 5.2平面直角坐标系(一) 皮继红 教学目标: [知识目标] 1.理解平面直角坐标系.横轴.纵轴.原点.坐标等概念及象限的划分. 2.认识并能画出平面直角坐标系. 3.能在给定的直角坐标系中,由点的位置写出它的坐标. [能力目标] 1.通过 ...查看


  • WGS84经纬度坐标与北京54或者西安80坐标
  • WGS84经纬度坐标与北京54坐标或者西安80坐标 一般来讲,GPS直接提供的坐标(B,L,H)是1984年世界大地坐标系(Word Geodetic System 1984即WGS-84)的坐标,其中B为纬度,L为经度,H为大地高即是到W ...查看


  • 6平面直角坐标系及坐标方法的简单应用
  • [同步教育信息] 一. 本周教学内容: 平面直角坐标系及坐标方法的简单应用 二. 教学要求 1. 认识并能画出平面直角坐标系:在给定的直角坐标系中,会根据坐标描出点的位置.由点的位置写出它的坐标. 2. 能在方格纸上建立适当的直角坐标系,描 ...查看


  • 中位线的性质
  • 教学设计:平面直角坐标系(第一课时) 一.教材分析: <平面直角坐标系>是九年义务教育七年级数学下册第五章<位置与坐标>第二节第一次课时的内容,它是在学习了数轴和有序数对后安排的一次概念性教学,也是初中生与坐标系的第 ...查看


  • 世界因你而转-空间直角坐标系案例
  • 世界因你而转 -------<空间直角坐标系>教学案例 教材分析:本节课是在二维的平面直角坐标系的基础上的一个推广,也是知识层面上的一个延拓.在教学过程中,我充分运用类比.迁移.化归等数学思想方法,有效地锻炼了学生的空间思维能力 ...查看


  • 空间直角坐标系与点的坐标
  • 空间直角坐标系与坐标 (2)写出点P (2,3,4)在XOY 坐标平面内的射影的坐标是 ,在YOZ 坐标 班级 姓名 平面内的射影的坐标是 ,在XOZ 坐标平面内的射影的坐标 1.过空间中一点O ,由三条互相垂直的数轴按右手规则组成的空间直 ...查看


  • 左手坐标系和右手坐标系
  • 空间直角坐标系 解析几何为了沟通空间图形与数的研究,需要建立空间的点与有序数组之间的联系,为此我们通过引进空间直角坐标系来实现. 过定点O,作三条互相垂直的数轴,它们都以O为原点且一般具有相同的长度单位.这三条轴分别叫做x轴(横轴).y轴( ...查看


  • 用二次多项式实现54坐标到80坐标的转换
  • !" !!!!!" 测量方法 用二次多项式实现!"坐标到#$坐标的转换 王建弟,张伟 (浙江大学环境与资源学院,%&$$'() 摘要:&(!"年北京坐标系和&(#$西安坐标系是 ...查看


热门内容