我觉得这可能是在这里被问到/回答了,如果有的话,我为带宽道歉,但我没有看到任何解释。
如何在Flash AS3中将一个对象的坐标空间转换为另一个?我可以在一个对象中取一个点并使用local3DToGlobal()将其转换为全局坐标,然后使用globalToLocal3D()将其转换为另一个对象的本地 - 但是有直接的方法吗?
因此,如果我想让一个物体能够对另一个物体说:'将你的左上角移动到我的左上角',即使两个物体在不同的z空间,三维旋转等等。
我认为它在matrix3D矩阵操作中 -
矩阵乘法?已将transformVector()? deltaTransformVector()?
我一直在研究API,但我真的很感激一个具体的例子。
谢谢!
答案 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);
}