Вопрос

Я немного поиграл с новыми возможностями 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?

Я бы подумал, что это не должно быть слишком сложно, но я не вижу, как решить эту проблему.

Обновить:как следует из одного из комментариев:настройка перспективного проекта.fieldOfView к чему-то близкому к 0 (10 на самом деле дает более приятный результат в моей настройке, чем что-то вроде 0.1) вы получаете проекцию, которая является почти ортогональной, что может быть достаточно хорошим.

Это было полезно?

Решение

Наконец-то у меня это заработало.

        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)

Другие советы

Вы могли бы установить для свойства fieldOfView PerspectiveProjection значение, БЛИЗКОЕ к 0.Я не уверен, что это лучший способ.

Ссылка: http://thebackbutton.com/misc/f10api/flash/geom/PerspectiveProjection.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top