flash - Flash中的透视

标签 flash actionscript-3 3d haxe

我有一个 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/

相关文章:

php - 将 AS3 与 PHP 通信。发送变量到php页面,但$_POST为空

performance - Flash 如何处理我的匿名函数?

actionscript-3 - Flash AS3 : 1026 Error: Constructor functions must be instance methods

actionscript-3 - 专业程序员学习 ActionScript 3.0 的资源

python - 有没有办法使用 matplotlib 来制作 "3D cloud plot"?

带进度条的 JavaScript 音乐播放器?

flash - 多个音频到netStream?

actionscript-3 - 用于 as3/flex 项目的 CI 友好型自动化构建

ruby - 选择边循环

3d - 如何将非网格3D数据描绘为热图?