Flash中的透视图

Wil*_*ill 3 flash 3d haxe actionscript-3

我有一个2D图像,我想用真正的3D绘制,并围绕它的中心旋转.

我正在使用Actionscript 3代码(实际上是Haxe,没有IDE),我正在努力通过实验发现这些值.

我有一个DisplayObject.如果我使用rotateZ = 45,物体围绕它的左上角而不是中心旋转; 更复杂的Display.transform.matrix事情,如同rotate(Math.PI/4)工作方式.如何围绕DisplayObject的XY中心在Z轴上旋转?

那么我如何让观点发挥作用呢?透视是相对于父级还是旋转后的对象?

我在DisplayObject实例上使用什么旋转和位置?透视变换的值是什么,以及我应用它们的对象是什么?

ric*_*son 5

一种非常常见的方法是使用一个透视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;
Run Code Online (Sandbox Code Playgroud)

这里,平面放在名为pivot的容器内,并偏移其宽度和高度的一半.这意味着平面显示对象的中心将与容器的配准点(原点)对齐.现在围绕原点旋转容器(枢轴)将使其所有子项(包括平面)围绕同一点旋转.

这通常比矩阵变换更容易使用.特别是因为3D矩阵很容易难以理解,除非你很熟悉数学.

此外,在重置矩阵之前,只修改plane.transform.matrix3D矩阵对象不会影响显示对象.如果您正在使用补间引擎,这可能非常繁琐,例如,您可能需要每次都重置矩阵的UPDATE事件处理程序,如下所示:

plane.transform.matrix3D = myModifiedMatrix3D;
Run Code Online (Sandbox Code Playgroud)

使用pivot方法,您可以简单地补间rotationX/Y/Z属性.