Question

Je suis maintenant une base de code multiplateforme pour Xbox360 et Windows XP. Je vois un problème du côté de XP qui semble être lié à D3DRS_VIEWPORTENABLE sur la version Xbox360 ne pas avoir un équivalent sur Windows XP D3D9. Cet article avait une idée intéressante, mais la seule façon de construire une matrice d'identité est de fournir des nombres négatifs à D3DVIEWPORT9 :: X et D3DVIEWPORT9 :: Hauteur, mais ils sont des nombres non signés. (J'ai essayé de mettre en chiffres négatifs de toute façon, mais intéressant rien ne se passe.)

Alors, comment peut-on imiter le comportement des D3DRS_VIEWPORTENABLE sous Windows XP / D3D9?

(Par souci de clarté, le résultat que je vois est que fonctionne quad aligné écran 2D bien sur Xbox360, mais est compensé / étendu sur Windows XP. En fait, (0, 0) commence au centre de l'écran Windows XP au lieu de dans le coin inférieur gauche comme sur la Xbox360 à la suite de l'application de transformation de la fenêtre.)

Mise à jour: Je n'ai pas eu un devkit Xbox360 au moment où j'écrit cette question, mais je l'ai depuis un acquis. Je commentais la désactivation de l'état D3DRS_VIEWPORTENABLE, et le même comportement exact a donné lieu à la Xbox360 que sur la construction Windows XP. Donc, il doit y avoir quelque chose de magique DirectX pour combler l'écart ici pour émulant D3DRS_VIEWPORTENABLE la mise hors tension sur Windows XP.

Était-ce utile?

La solution

Au lieu de penser à comment vous pourriez mettre des négatifs dans la matrice viewport pense à ce sujet à partir de la matrice de projection.

La matrice de fenêtre est appliqué directement après la matrice de projection. Donc, si vous imaginez le réglage de la fenêtre à l'identité et la multiplication avec la matrice PVE (projection mondiale vue). à-dire

world * view * projection * viewport

Vous pouvez maintenant définir la fenêtre à tout ce que vous voulez.

Bien sûr, ce n'est pas vraiment la meilleure façon d'attaquer le problème non plus. Certains pilotes vont probablement faire Optimisations basées sur les entrées dans t e viewport (ils ne peuvent pas faire en fait une matrice se multiplient, pour un). Je ne voudrais pas utiliser personnellement le système ci-dessus, je peux prévoir trop de questions venant de lui.

Alors, où est-ce que vous quittez?

Et bien en fait est simple encore assez. Si vous multipliez la matrice de projection par une matrice qui est l'inverse de la matrice de la fenêtre, vous constaterez que lorsque la fenêtre « matrice » est appliquée, ils annulent et il vous reste la sortie directe de la projection. La fenêtre a été, efficace, « désactivé ».

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top