我有一个 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;
这里,plane 被放置在名为pivot 的容器中,并偏移了它的宽度和高度的一半。这意味着平面显示对象的中心将与容器的注册点(原点)对齐。现在围绕原点旋转容器 (pivot) 将围绕同一点旋转它的所有子项,包括平面。
这通常比矩阵变换更容易使用。尤其是 3D 矩阵很容易难以理解,除非您对数学很熟悉。
此外,仅修改plane.transform.matrix3D 矩阵对象不会影响显示对象,直到您重置矩阵。例如,如果您使用的是补间引擎,这可能会非常乏味,您可能需要一个 UPDATE 事件处理程序来每次重置矩阵,如下所示:
plane.transform.matrix3D = myModifiedMatrix3D;
使用枢轴方法,您可以简单地补间 rotationX/Y/Z 属性。
关于flash - Flash中的透视,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1939422/