ортогональная проекция flash 10
-
21-08-2019 - |
Вопрос
Я немного поиграл с новыми возможностями 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