我有一个2D图像,我想绘制为真实的3D,然后绕其中心旋转。
我正在使用Actionscript 3代码(实际上是Haxe,没有IDE),并且正在努力通过实验发现这些值。
我有一个DisplayObject。如果我使用rotateZ = 45
,则对象绕其左上角而不是中心旋转;更加复杂的Display.transform.matrix
和rotate(Math.PI/4)
之类的工作方式相同。如何围绕DisplayObject的XY中心在Z轴上旋转?
然后我如何才能使视角起作用?透视图是相对于父对象还是旋转后的对象?
我在DisplayObject实例上使用什么旋转角度和位置?透视变换的值是什么,我应将它们应用于什么对象?
最佳答案
一种非常常见的方法是使用枢轴DisplayObjectContainer,将实际平面添加到该容器中,并使其偏离中心。然后,您实际上旋转了容器。
var pivot : DisplayObjectContainer;
// plane is a display object (e.g. Sprite) that has been created previuosly
// and contains your 2D image.
plane.x = -plane.width/2;
plane.y = -plane.height/2;
pivot.addChild(plane);
pivot.rotationY = 45;
在这里,飞机被放置在名为“pivot”的容器内,并且偏移了其宽度和高度的一半。这意味着平面显示对象的中心将与容器的注册点(原点)对齐。现在,围绕原点旋转容器(枢轴)将围绕同一点旋转其所有子级,包括平面。
这通常比矩阵转换更容易使用。尤其是因为3D矩阵很容易变得难以理解,除非您对数学很熟悉。
此外,仅修改plane.transform.matrix3D矩阵对象不会影响显示对象,除非您重置矩阵。例如,如果您使用补间引擎,这可能非常繁琐,在该引擎中,您可能需要具有UPDATE事件处理程序,该事件处理程序每次都会重置矩阵,如下所示:
plane.transform.matrix3D = myModifiedMatrix3D;
使用枢轴方法,您可以简单地在rotationX / Y / Z属性之间进行补间。