1

我需要知道更改它的rotationX 值后显示对象的可见高度是多少。

我有一个应用程序允许用户在 3D 空间中布置地板。我希望地板的大小在 3D 旋转后自动拉伸,以便它始终覆盖某个区域。

有人知道解决这个问题的公式吗?

编辑:我想我真正想做的是将度数转换为像素。

在 2D 平面上,比如 100 x 100 像素,rotationX 上的 -10 度变化意味着平面在顶部有一个不再可见的间隙。我想知道这个间隙有多少像素,以便我可以拉伸平面。

在 Flex 中,显示对象高度属性的值在应用旋转之前和之后都保持不变,这实际上可能是一个错误。

编辑 2:必须有一个通用的数学公式来解决这个问题,而不是 Flash/Flex 特定的东西。在 3D 空间中查看对象时,如果对象向后旋转(对象顶部翻跟头远离观察者),新的可见高度将基于旋转度数是多少?这可能以像素、米、肘或其他为单位。

4

4 回答 4

0

您是否尝试过使用对象的边界矩形并对其进行测试?

var dO:DisplayObject = new DisplayObject();
dO.rotation = 10;
var rect:Rectangle = dO.getRect();

// rect.topLeft.y is now the new top point.
// rect.width is the new width.
// rect.height is the new height.

至于地板,我需要更多信息,但是您是否尝试过设置 floor.percentWidth = 100?那可能行得通。

于 2009-11-05T15:19:22.937 回答
0

你检查过 DisplayObject.transform.pixelBounds 吗?我还没有尝试过,但它可能更有可能考虑到轮换。

于 2009-11-05T22:06:03.867 回答
0

旋转实际上改变了 DisplayObject 的轴(即 x 和 y 轴被旋转)。这就是为什么您没有看到高度差异的原因。所以为了获得视觉高度和 y 你可以试试这个。

var dO:DisplayObject = new DisplayObject();
addChild();
var rect1:Rectangle = dO.getRect(dO.parent);
dO.rotation = 10;
var rect2:Rectangle = dO.getRect(dO.parent);
在这种情况下,rect1 和 rect2 应该不同。如果要检查 dO 的视觉坐标,只需将 dO.parent 更改为 root。

于 2009-11-06T21:32:26.820 回答
0

我没有测试用例,但在我的脑海中,我猜想是这样的:

var d:DisplayObject;
var rotationRadians:Number = d.rotationX * Math.PI / 180;
var visibleHeight:Number = d.height * Math.cos(rotationRadians);

但是,这没有考虑任何其他转换。

于 2009-11-12T02:52:46.703 回答