Actionscript 3:将坐标从对象的3D空间转换为另一个空间?

时间:2013-04-12 19:46:18

标签: actionscript-3 flash 3d

我觉得这可能是在这里被问到/回答了,如果有的话,我为带宽道歉,但我没有看到任何解释。

如何在Flash AS3中将一个对象的坐标空间转换为另一个?我可以在一个对象中取一个点并使用local3DToGlobal()将其转换为全局坐标,然后使用globalToLocal3D()将其转换为另一个对象的本地 - 但是有直接的方法吗?

因此,如果我想让一个物体能够对另一个物体说:'将你的左上角移动到我的左上角',即使两个物体在不同的z空间,三维旋转等等。

我认为它在matrix3D矩阵操作中 -

矩阵乘法?已将transformVector()? deltaTransformVector()?

我一直在研究API,但我真的很感激一个具体的例子。

谢谢!

1 个答案:

答案 0 :(得分:0)

一种方法是getRelativeMatrix3D(),从显示对象的transform属性调用,如:transform.getRelativeMatrix3d(root).position

  

返回一个Matrix3D对象,它可以转换a的空间   指定与当前显示对象相关的显示对象   空间。您可以使用getRelativeMatrix3D()方法移动一个   三维显示对象相对于另一个三维   显示对象。

从Adobe的Performing complex 3D transformations开始,有一个使用Matrix3D对象重新排序显示的示例,其中重新排序框的面,以确保3D显示对象的分层对应于旋转后的相对深度:< / p>

var faces:Array;

for (var i:uint = 0; i < 6; i++) 
{ 
    faces[i].z = faces[i].child.transform.getRelativeMatrix3D(root).position.z; 
    this.removeChild(faces[i].child); 
} 
faces.sortOn("z", Array.NUMERIC | Array.DESCENDING); 
for (i = 0; i < 6; i++) 
{ 
    this.addChild(faces[i].child); 
}