2010-01-27 5 views
1

2D 비 어파 인 변환에 flash10의 Matrix3D 클래스를 사용할 때 매우 번거로운 시절을 보내고 있습니다. 기본적으로 스프라이트에 사각형이 있고 사각을 이루는 4 개의 점이 있습니다. 스프라이트에 변형을 적용하여 해당 점을 스프라이트의 꼭지점으로 만들고 싶습니다.어파인 2D 변환이 아닌 플래시 10의 4x4 Matrix3D 사용

this case과 같이 3x3 행렬을 사용하여이 수학 문제를 해결하는 데 많은 문제가 발생하지 않습니다. 문제는 플래시의 네이티브 변환 Matrix 클래스가 비 아핀 변환을 수행하지 않는다는 것입니다. 즉, Matrix 클래스의 u v 필드에 액세스 할 수있는 방법이 없습니다.

flash10의 3D에 대한 기본 지원으로 Matrix3D 클래스가 도입되어 비 아핀 변환이 가능하지만 엉망입니다. 기본적으로 PerspectiveProjection 클래스에서 필수 투영 행렬을 적용 할 것이므로이 행렬에 적용하는 내용은 화면에 표시되는 내용과 정확히 일치하지 않습니다. 이 투영을 비활성화 할 수있는 방법은 없으며이 투시 투영 매트릭스는 항상 비가역 매트릭스 (* 1)입니다. 여기에 설명 된 메서드는 - stackoverflow, flash10 정사영 프로젝션 - 또는 0에 가까운 fieldOfView 속성을 정의하거나 focalLengh를 큰 수로 정의하면 비 아핀을 사용하는 가장자리의 경우 투시 투영을 무효화하는 데 도움이되지 않습니다 2 차원 변환. 즉, Matrix3D의 일반적인 전단/스케일/회전으로 작업 할 때 거의 정사영으로 투영 할 수는 있지만, Affine 2D가 아닌 Matrix3D에서 동일한 PerspectiveProjection은 여전히 ​​바람직하지 않은 투시 투영을 갖습니다. 이 perspectiveProjection을 무효화 할 방법이 있을까요? 아니면 더 좋은 방법일까요? 현재로서는 평면을 두 개의 삼각형으로 분리하고 두 개의 아핀 변환을 적용하는 방법을 사용하고 있습니다.

대단히 고마워요! 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! 

답변

0

난 당신이 가서 Senocular에게 제안한다.

+0

글쎄, 그 당시에 내가 봤던 것은 아니지만 적어도 대답이 있었다.) 감사 – Waneck