Frage

Ich pflege eine Multiplattform -Codebasis für Xbox360 und WinXP. Ich sehe ein Problem auf der XP -Seite, das sich mit D3DRS_ViewPorsable auf der Xbox360 -Version in Bezug auf ein Äquivalent für WinXP D3D9 bezieht. Dieser Artikel Ich hatte eine interessante Idee, aber die einzige Möglichkeit, eine Identitätsmatrix zu konstruieren, besteht darin, negative Zahlen an D3DViewport9 :: x und d3dviewport9 :: Höhe zu liefern, aber es handelt sich um nicht signierte Zahlen. (Ich habe trotzdem versucht, negative Zahlen zu geben, aber es passierte nichts Interessantes.)

Wie ahmt man also das Verhalten von D3DRS_ViewPortieren unter WinXP/D3D9 nach?

(Für die Klarheit ist das Ergebnis, das ich sehe, dass ein 2D-Bildschirm auf Xbox360 einwandfrei funktioniert, aber auf WinXP ausgefallen ist. Tatsächlich beginnt der (0, 0) in der Mitte des Bildschirms auf WinXP anstelle von In der unteren linken Ecke wie auf der Xbox360 als Ergebnis der Anwendung der Ansichtsfenstertransformation.)

UPDATE: Ich hatte zu der Zeit, als ich diese Frage schrieb, keine Xbox360 DevKit, aber seitdem habe ich eine bekommen. Ich habe die Deaktivierung des D3DRS_ViewPortPorNable -Status ausgezeichnet, und genau das gleiche Verhalten resultierte auf der Xbox360 wie im WinXP -Build. Daher muss es einige DirectX -Magie geben, um die Lücke hier zu überbrücken, um D3DRS_ViewPortierenableer auf WinXP auszuschalten.

War es hilfreich?

Lösung

Anstatt darüber nachzudenken, wie Sie Negative in die Ansichtsfenstermatrix stecken können, denken Sie aus der Projektionsmatrix darüber nach.

Die Ansichtsfenstermatrix wird direkt nach der Projektionsmatrix angewendet. Wenn Sie sich also vorstellen, das Ansichtsfenster auf Identität und das Multiplizieren mit der WVP (World-View-Projection) -Matrix festzulegen. dh

world * view * projection * viewport

Sie können jetzt das Ansichtsfenster auf alles einstellen, was Sie wollen.

Natürlich ist dies auch nicht der beste Weg, um das Problem anzugreifen. Einige Fahrer werden wahrscheinlich optimiert, basierend auf Einträgen im TE -Ansichtsfenster (sie machen möglicherweise zum einen nicht eine Matrix -Multiplizierung). Ich würde das oben genannte System nicht persönlich verwenden, das ich zu viele Probleme vorhersehen kann.

Wo bleibt Sie also?

Nun, eigentlich ist es immer noch ziemlich einfach. Wenn Sie die Projektionsmatrix mit einer Matrix multiplizieren, die die Inverse der Ansichtsfenstermatrix ist, werden Sie feststellen, dass die Ansichtsfenster "Matrix" sich gegenseitig absagen und Sie die direkte Ausgabe der Projektion erhalten. Das Ansichtsfenster wurde nun effektiv "deaktiviert".

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top