Использование 4x4 Matrix3D из flash10 для неаффинных 2D-преобразований

У меня было очень утомительное время, когда я использовал класс Matrix3D из flash10 для двухмерных неаффинных преобразований. По сути, у меня есть квадрат в спрайте и четыре точки, которые образуют четырехугольник, и я хочу применить преобразование к спрайту, чтобы сделать эти точки вершинами спрайта.

Решить эту математическую задачу с использованием матриц 3x3, как в этой case. Проблема в том, что собственный класс преобразования Flash Matrix не выполняет неаффинных преобразований - это означает, что нет способа получить доступ к полям u v w класса Matrix.

Благодаря встроенной поддержке 3D в flash10, был представлен класс Matrix3D, который допускает неаффинное преобразование, но с ним сложно работать. По сути, все, что вы применяете к этой матрице, не совсем то, что будет отображаться на экране, поскольку будет применяться обязательная матрица проекции из класса PerspectiveProjection. Невозможно отключить эту проекцию, и эта матрица перспективной проекции всегда является необратимой матрицей (* 1). Описанный здесь метод - в stackoverflow, об ортогональной проекции flash10 - для определения свойства fieldOfView как около 0 или focalLengh до огромного числа, не поможет обнулить перспективную проекцию для граничных случаев, которые работают с неаффинными 2d преобразования. Это означает, что даже несмотря на то, что мы можем сделать проекцию почти ортогональной при работе с нормальным сдвигом / масштабированием / вращением Matrix3D, та же самая PerspectiveProjection на Matrix3D с неаффинными 2-мерными преобразованиями все равно будет иметь нежелательную перспективную проекцию. Есть ли способ свести на нет эту перспективную проекцию? Или, может быть, лучший способ сделать это? На данный момент я использую обходной путь разделения плоскости на два треугольника и применения к ним двух аффинных преобразований.

Огромное спасибо! Cauê

(* 1) когда фокусное расстояние равно 1, матрица перспективной проекции имеет следующий вид:

--          --
| 1  0  0  0 |
| 0  1  0  0 |
| 0  0  1  0 |
| 0  0  1  0 |
--          --
           ^ No, sadly this wasn't a typo!

person Waneck    schedule 27.01.2010    source источник


Ответы (1)


Я предлагаю вам пойти и спросить Senocular.

person Engineer    schedule 10.02.2011
comment
ну, это не то, что я тогда искал, но, по крайней мере, ответ был; ) Спасибо - person Waneck; 16.04.2011