Использование Matrix3D 4x4 от flash10 для неаффинных 2D преобразований - PullRequest
1 голос
/ 27 января 2010

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

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

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

Большое спасибо! 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!

1 Ответ

0 голосов
/ 10 февраля 2011

Я предлагаю вам пойти и спросить Сенокуляр .

...