Altes Spiel auf Widescreen: Strecken verhindern



  • Hi!

    Bei einem alten Spiel, das nicht auf Widescreen ausgelegt ist, wird das Bild auf zB. einem 16:10 Monitor gestreckt, auch wenn man in den Spieloptionen die native Monitorauflösung wählt.
    Ich nehme mal an, dass hier einfach für jede Auflösung der gleiche aspect ratio in der Direct3D projection matrix gesetzt wurde (4/3), und nicht zB. für 1920x1200 ein 16/10 ratio.

    Nun, jetzt gäbe es denke ich die Lösung, den aspect ratio für die weiten Auflösungen entsprechend anzupassen, doch dann würde sich im Spiel das Sichtfeld auch vergrößern, man würde also mit Widescreen mehr von der Spielwelt sehen... blöd (unfair) für Multiplayer.

    Eine weitere Lösung wäre ein schwarzer Balken links und rechts. Doch mir fällt momentan keine einfache Möglichkeit ein, dies zu realisieren.

    Fällt euch etwas dazu ein? Das Problem ist ja, dass das Device eigentlich unbedingt mit einer 4:3 Auflösung plus 4/3 ratio erstellt werden muss, dann zeichnet die Engine schon mal das richtige Bild.
    Doch man bräuchte irgendwie einen zweiten Framebuffer in 16:10, in den das 4:3 Bild plus schwarze Balken kopiert werden. Und dieser 16:10 Framebuffer soll dann erst am Monitor angezeigt werden.
    Keine Ahnung, inwiefern das möglich ist... performant soll es natürlich auch sein 🙂

    Infos:
    - Es geht ausschließlich um Direct3D8
    - Auf Monitor- und Grafikkarteneinstellungen soll verzichtet werden



  • Hast du versucht das Spiel per SetWindowPos oder MoveWindow einfach in 4 zu 3 zu positionieren? Dann hätte das Spiel immerhin die richtige Größe. Statt schwarzen Balken wäre es der Desktop oder was auch immer hinter dem Fenster ist.
    Ansonsten selbst ein Fenster aufmachen (16:9), alles schwarz malen, das Spielfenster adoptieren (SetParent()) und 4:3 positionieren.



  • Es soll unbedingt im Vollbildmodus laufen.



  • Wie dein Rechner mit verschiedenen Aspect ratio umgeht solltest du eigentlich beim Treiber einstellen könne. Schau ma nach.



  • Ich möchte das unabhängig vom Treiber lösen.


Anmelden zum Antworten