2

我一直在玩一些新的 flash 10 3d 可能性,发现在 3d 中旋转精灵相当容易:

var card:Sprite = new MyCard()
card.x = 100
card.y = 100
card.z = 200
card.rotationX = -60
addChild(card)

简单而有效,这显示了卡片的透视旋转。

现在我想使用正交投影,但我不知道从哪里开始。DisplayObject 确实有一个 perspectiveProjection 成员,但它当然只能进行透视投影。也许我应该使用 transform.matrix3D?

我认为这应该不会太难,但我不知道如何解决这个问题。

更新:正如其中一条评论所暗示的:将perspectiveProjection.fieldOfView 设置为接近0(10 实际上在我的设置中产生比0.1 更好的结果)你会得到一个几乎正交的投影,这可能已经足够好了。

4

2 回答 2

2

我终于让它工作了。

        var m:Matrix3D = new Matrix3D()
        var v3:Vector.<Vector3D> = new Vector.<Vector3D>(3);
        v3 = m.decompose();
        v3[2] = new Vector3D(1,1,0);
        m.recompose(v3)
        transform.matrix3D.appendRotation( -90, Vector3D.X_AXIS );
        transform.matrix3D.appendRotation( -45, Vector3D.Y_AXIS );
        transform.matrix3D.appendRotation( 35.264, Vector3D.X_AXIS );
        transform.matrix3D.append(m)

现在,任何添加到应用了此变换的精灵的元素都将显示在等距投影中。(那个 35.264 是一个近似值,请参见http://en.wikipedia.org/wiki/Isometric_projection

于 2009-04-01T14:00:42.887 回答
0

您可以将 PerspectiveProjection 的 fieldOfView 属性设置为 NEAR 0。我不确定这是否是最好的方法。

参考:http ://thebackbutton.com/misc/f10api/flash/geom/PerspectiveProjection.html

于 2009-03-20T11:03:32.240 回答