3

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

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

因此,如果我希望一个对象能够对另一个对象说:“将你的左上角移动到我的左上角”,即使这两个对象位于不同的 z 空间中、3 维旋转等。

我假设它在 matrix3D 矩阵操作中——</p>

矩阵乘法?变换向量()?deltaTransformVector()?

我一直在研究 API,但非常感谢一个具体的例子。

谢谢!

4

1 回答 1

0

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

返回一个 Matrix3D 对象,该对象可以将指定显示对象的空间相对于当前显示对象的空间进行变换。您可以使用 getRelativeMatrix3D() 方法相对于另一个 3D 显示对象移动一个 3D 显示对象。

在 Adob​​e 的Performing complex 3D transformations中,有一个使用 Matrix3D 对象进行重新排序显示的示例,其中对框的面进行重新排序以确保 3D 显示对象的分层对应于应用旋转后的相对深度:

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); 
} 
于 2013-05-18T01:21:25.880 回答