2010-12-17 5 views
0

저는 sidescroller 유형의 게임을 위해 XNA의 직교 투영에서 일부 지오메트리를 그립니다. 내가 원하는 것은 원근 투영에서 배경 지오메트리를 렌더링하는 것입니다.XNA의 원근 투영법 변환?

그러나 전적으로 전경과 '라인을 이루는'배경 지오메트리가 필요합니다. 예를 들어 원근감이 있다면 3D 모델의 위치를 ​​300, 30으로 설정하고 직교 투영에서는 300, 30까지 줄 수 있습니다.

이것을 수행 할 수있는 방법이 있습니까? 나는 프로젝션을 스크린하기 위해 세계를 들여다보고 있었지만, 내가 올바른 길을 가고 있는지 확신 할 수 없었다.

도움 주셔서 감사합니다.

답변

1

ㅎ, 여기에 괴물이 있습니다 ... 이것은 분명히 잘 끝난 것보다 쉽습니다 .-) 예, 당신은 세계/화면 영사와 함께 올바른 길을 가고 있습니다. 당신이해야 할 일은 2 차원 투시 투영을 모두 렌더링 할 "Z"평면을 선택하는 것입니다. 그러면 "Z"평면에 관심이있는 주어진 점을 화면 좌표로 숨기고 그 자리에서 직교 투영을 렌더링합니다.

1

조엘이 맞습니다. 2D와 3D를 결합 할 수 있다면 이상적입니다. 2d는 직교 뷰로, 3 차원은 투시 뷰로 사용됩니다. 직교 뷰를 대신하여 2 차원 렌더링에 여러 개의 2 차원 스프라이트를 사용합니다. 관련하여 는 도우미 매트릭스 구조의 기능 .. 같은 것을 사용하여, 당신은 최선의 선택이 될 것입니다

Matrix view = Matrix.CreatePerspective(.......) 

및 기타 유사한 정적 도우미 기능을 .... 기하학하는

http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.matrix_members.aspx

또한 스케일, 회전, 평행 이동으로 모델을 변형하려면 매트릭스 구조 자체로 달성 할 수 있습니다.

Matrix oldWorld = Matrix.CreateWorld(...); 

// something happens ; next update 

Matrix scaleMat = Matrix.CreateScale(...); 
Matrix rotXMat = Matrix.CreateRotationX(...); 
Matrix rotYMat = Matrix.CreateRotationY(...); 
Matrix rotZMat = Matrix.CreateRotationZ(...); 
Matrix translationMat = Matrix.CreateTranslation(...); 

Matrix newWorldMat = scaleMat*rotXMat*rotYMat*rotZMat*translationMat*oldWorldMat;