var sceneM:Matrix3D=new Matrix3D(Vector.然后假定 room 在 scene 的 (10,20,30) 坐标处:([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]));
var roomM:Matrix3D=new Matrix3D(Vector.<Number>([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.<Number>([1,0,0,0,0,1,0,0,0,0,1,0,0,0,-1000,1]));p 在 room 中描述是 (40,50,60);
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 处,画图分析:
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.93577981651376 32.11009174311927源文件下载
联系客服