3D,AS3,Flex - 将旋转度转换为可见高度

时间:2009-11-05 15:05:05

标签: flex flash actionscript-3 3d papervision3d

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

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

任何人都知道解决这个问题的公式吗?

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

在2D平面上说100 x 100像素,旋转X上的-10度变化意味着平面在顶部有一个不再可见的间隙。我想知道这个间隙有多少像素,这样我就可以拉伸飞机了。

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

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

4 个答案:

答案 0 :(得分: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?这可能有用。

答案 1 :(得分:0)

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

答案 2 :(得分: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的视觉坐标,那么只需用root更改dO.parent。

答案 3 :(得分:0)

我没有测试用例,但是我想我会猜到:

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

但是,这不会考虑任何其他转换。