2010-02-07 3 views
2

Si je veux une vue orthograpique de la région (-10, -1), (- 2, -1), (- 2, -7), (- 10, -7) comment définir la vue et la projection matrices? (Je mets la matrice du monde à l'identité). J'ai essayé, mais ça n'a pas:Comment définir une vue orthographique dans xna?

worldMatrix = Matrix.Identity; 
projectionMatrix = Matrix.CreateOrthographicOffCenter(-10,-2,-7,-1,-1.0f,100.0f); 
viewMatrix = Matrix.CreateTranslation(1, -1, 0) * Matrix.CreateScale(400,-300,1); 

Je supposais que cet ordre de transformation: (est-il exact?)

screenPoint = worldPoint*worldMatrix*projectionMatrix*viewMatrix 

Ma motivation est que la ProjectionMatrix transforme la boîte de monde à normaliced coordonnées de l'appareil: (- 10, -1) -> (- 1,1), (-2, -1) -> (1,1), (-2, -7) -> (1, -1), (-10, -7) -> (- 1, -1) et je déplace alors ce carré d'unité vers le quatrième quadrant et le redimensionne à l'écran (800x600) pour retourner la direction y. Mais je fais des choses mal parce que je ne peux rien voir.

+0

Résolu! Mon problème était que j'ai confondu la transformation de vue pour une transformation de viewport, c'est-à-dire mapper -1 .. 1 à l'écran. Mais les transformations de viewport sont plus récentes dans xna, elles sont implicites. Cette idée m'a beaucoup aidé. La solution s'est avérée être très simple: worldMatrix = Matrix.Identity; viewMatrix = Matrix.Identity; projectionMatrix = Matrix.CreateOrthographicOffCenter (-10, -2, -7, -1, -1.0f, 100.0f); – lgwest

+0

Pouvez-vous mettre cela comme une réponse à votre propre question et la marquer comme la réponse afin qu'elle n'apparaisse pas dans la section "questions sans réponse"? – Jeff

Répondre

4

Résolu! Mon problème était que j'ai confondu la transformation de vue pour une transformation de viewport, c'est-à-dire mapper -1 .. 1 à l'écran.

Mais les transformations de viewport ne sont jamais évoquées dans xna, elles sont implicites. Cette idée m'a beaucoup aidé. La solution s'est avérée être très simple:

worldMatrix = Matrix.Identity; 
viewMatrix = Matrix.Identity; 
projectionMatrix = Matrix.CreateOrthographicOffCenter(-10, -2, -7, -1, -1.0f, 100.0f); 
Questions connexes