2009-03-21 4 views
4

XNA에 2D Bone 시스템을 작성하려고합니다.2D Bone system

초기 생각은 항목을 쉽게 표시 할 수 있도록 뼈대를 통해 회전 및 위치를 추적하기 위해 매트릭스를 사용했습니다.

차가운 생각, 그때 얼굴에 나를 당황 스럽다. 행렬이 단일 스프라이트 배치에만 적용될 수 있음을 알았습니다. 그리기 호출이 아니라 그리기 호출이 필요합니다!

실망 스러운지 확인하기 위해 성능 테스트를 실시했으며, spritebatch.Begin 및 End를 호출하면 엄청난 양의 (그리고 용납 할 수없는) 금액으로 프레임 속도가 떨어졌습니다.

그래서 단일 뼈대 이미지를 그리기 전에 수동으로 최종 위치와 회전 (그리고 아마도 미래의 스케일)을 구성해야 할 것입니다. 이 경우에도 여전히 행렬을 사용하고 뼈를 그릴 직전에 정보를 추출 할 수 있습니까? 그렇다면 필요한 최종 정보를 얻는 방법에 대한 아이디어가 있습니까? 아니면 부모 노드의 원래 위치와 회전에서 모든 것을 시도하고 구성하는 것이 더 쉬울까요?

미리 아이디어를 가진 사람에게 감사드립니다.

답변

4

솔직히 나는 Sprite 렌더링 객체를 버리고 화면 공간 쿼드로 전환합니다. 스크린 공간 쿼드에는 인공적인 제한이 없으며 뼈 시스템의 표준 구현을 사용할 수 있습니다. 이동하면서 변환을 적용한 트리를 가로 지른 다음 트리 위로 이동하면서 팝업합니다.

0

어쨌든 2D에서 작업 할 때 매트릭스가 과도하지 않습니까? 회전을위한 4 개의 곱셈과 변환을위한 2 개의 덧셈을 할 수있을 때 각 행렬 - 벡터 곱에 대해 16 개의 스칼라 곱셈을 의미합니까?