Widescreenproblem

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Tornby
Beiträge: 17
Registriert: 17.09.2010, 15:33

Widescreenproblem

Beitrag von Tornby »

Hallo,

ich hab folgendes Problem. Mein Spiel hat ne Auflösung von 1024x768. Das problem ist, dass das auf Widescreen gestreckt aussieht. Die auflösung ist aber fix. Wie kann ich das machen dass es so aussieht wie bei Peggle? Und wie ermittle ich ob ich einen Widescreen habe oder nicht? Ich nutze C++ und DirectX 9. Ein paar Ansätze wären gut, Code brauch ich keinen denk ich. Die Desktopauflösung zur Ermittlung des Widescreens fällt raus, weil viele auch mit nem Widescreen ne auflösung von 800x600 haben z. B. ältere Leute die schlecht sehen.

http://www.overclock.net/attachments/pc ... peggle.jpg
Benutzeravatar
Krishty
Establishment
Beiträge: 8268
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Widescreenproblem

Beitrag von Krishty »

Per GetDeviceCaps() mit HORZSIZE und VERTSIZE kannst du die physische Größe des Monitors abschätzen (den Device-Context mit GetDC(NULL) holen) und sein Seitenverhältnis berechnen. Dass die Angabe präzise ist, ist mit Sicherheit auszuschließen, aber für das Seitenverhältnis sollte es ausreichen und wenn es damit nicht geht, dann garnicht (ich weiß z.B. nicht, wie sich das auf besagten Alte-Leute-PCs verhält – aber diese Leute nehmen ja auch im Normalbetrieb gestrecktes Bild in kauf).

Jedenfalls kannst du dann das Seitenverhältnis deiner Projektionsmatrix übergeben und die Streckung ausgleichen. Beachte, dass die 1024 Pixel trotzdem noch über die gesamte Breite gestreckt werden – die schwarzen Ränder musst du u.U. selber rendern um von deiner implementierung abhängig möglicherweise auftretende Fehler am Bildrand zu vermeiden und die tatsächliche Auflösung deines Spiels ist z.B. auf Widescreens halbiert, weil die Pixel horizontal doppelt so breit sind wie vorher. Falls du vortransformierte Vertices benutzt (GUI usw.), musst du den Code anpassen, weil auch die Koordinaten gestreckt werden.

Fixe Auflösungen auf PCs sind eine riesige Fehlentscheidung. Mit D3D10 gäbe es zumindest das Schlupfloch, per Scaling-Mode der Swap-Chain zu erzwingen, dass der Monitor nicht streckt und skaliert.

Gruß, Ky
Zuletzt geändert von Krishty am 17.09.2010, 16:01, insgesamt 1-mal geändert.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Despotist
Establishment
Beiträge: 394
Registriert: 19.02.2008, 16:33

Re: Widescreenproblem

Beitrag von Despotist »

Am einfachsten wäre es wohl wenn du den Backbuffer in der gewünschten Widescreenauflösung erstellst und dein Spiel in eine Textur deiner fixen Auflösung renderst (Rendertarget). Dann renderst du die Spieltextur einfach in die Mitte des Backbuffers.
Benutzeravatar
Krishty
Establishment
Beiträge: 8268
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Widescreenproblem

Beitrag von Krishty »

Stimmt :) Aber dann Anti-Aliasing abschminken und schön auf die Mauskoordinaten aufpassen, falls die benutzt werden.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Tornby
Beiträge: 17
Registriert: 17.09.2010, 15:33

Re: Widescreenproblem

Beitrag von Tornby »

Hey danke für die coolen Antworten. Ich denke ich werde beides machen also erst über Device Caps ermitteln und dann halt das Rendertarget.

@Krishty:

Du hast Recht, dass das keine gute idee ist mit der fixen Auflösung aber das Spiel ist ja 2D (also D3D mit Orhtogonalmatrix). Das Spiel ist schon fast fertig... Ist mein erstes richtiges großes Projekt von daher ist die Engine auch älter und jetzt alles noch Auflösungflexibel zu gestalten (auch Maussteuerung und GUI) etc. ist halt zu aufwendig. Aber danke für den Hinweis.

AA benutz ich nicht, ist ja wie gesagt 2D (3D beschleunigt). Mit den Mauskoordinaten mach ichs so das die Engine ein Rechteck ermittelt in der sich die Maus bewegt.

Wens interessiert:

http://www.turrican.gamevoice.de/wip/ja ... enews1.jpg

Vielleicht kennt es ja jemand ;)
Benutzeravatar
Krishty
Establishment
Beiträge: 8268
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Widescreenproblem

Beitrag von Krishty »

Sieht für einfaches 2D atemberaubend gut aus. Wirklich spitzenmäßiges Artwork.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Tornby
Beiträge: 17
Registriert: 17.09.2010, 15:33

Re: Widescreenproblem

Beitrag von Tornby »

Danke die Grafiken hat mein Bruder und ein Freund gemacht. :-)
Benutzeravatar
Jonathan
Establishment
Beiträge: 2398
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Widescreenproblem

Beitrag von Jonathan »

Oha, jetzt treibt sich poke53280 im zfx rum. Ist ja interessant, wen man hier alles wieder sieht :)
PS: Turrican war klasse!
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Tornby
Beiträge: 17
Registriert: 17.09.2010, 15:33

Re: Widescreenproblem

Beitrag von Tornby »

Äh mal ne Frage... Woher will Windows wissen wie groß mein Bildschirm ist????

"Width, in millimeters, of the physical screen."

EDIT:
Achso verstehe der "schätzt" das aufgrund der Auflösung... Ja ansonsten lass ich es halt aus und der kriegt ein gestrecktes Bild...

@Jonathan

Heheheh ja find ich auch. Bin der jüngere Bruder vom Turri.
Benutzeravatar
TGGC
Establishment
Beiträge: 569
Registriert: 15.05.2009, 18:14
Benutzertext: Ich _bin_ es.
Alter Benutzername: TGGC
Echter Name: Ich _bin_ es.
Wohnort: Mainz
Kontaktdaten:

Re: Widescreenproblem

Beitrag von TGGC »

Das Seitenveraeltnis laesst sich nicht zuverlaessig automatisch herausfinden. Ich wuerde die Desktopaufloesung nehmen als Vorseinstellung nehmen und es dann einstellbar machen. Das bringt dir aber alles nichts, wenn deine Aufloesung fest 1024x768 ist, denn du muesstest dann dein Bild schrinken und von den 1024 Pixeln nur noch z.b. 800 belegen. Das was auf deinem Foto zu sehen ist, ist vermutlich eine Treibereinstellung, dem kann man sagen, das er beim Stretchen das Verhaeltnis beibehalten soll. Einzie Chance fuer dich, du bietest doch mehr Aufloesungen an z.b. 1680x1050 und zeichnest deine 1024x768 dort in die Mitte rein und aussem rum einen schwarzen Rand.
Tornby hat geschrieben: http://www.turrican.gamevoice.de/wip/ja ... enews1.jpg

Vielleicht kennt es ja jemand ;)
Ja, und ihr solltet es mal auf der Devmania vorstellen. Auf der letzten Dusmania haben wir die damalige Version komplett durchgespielt.
Tornby
Beiträge: 17
Registriert: 17.09.2010, 15:33

Re: Widescreenproblem

Beitrag von Tornby »

Ich hab das grad getestet, HORZSIZE und VERTSIZE hängen tatsächlich von der Auflösung ab bzw. ist scheinbar eine Umrechnung. Hab grad die Auflösung verändert. Also was ich mir überlegt hatte... Windows ermittelt ja eine Anzahl an Auflösungen welche vom Gerät unterstützt werden (also unter den Anzeigeeinstellungen). Ich glaub die krieg ich auch her, oder bin ich auf dem Holzweg? Die unterstützen Auflösungen sind ja bei einem Breitbildmonitor anders als bei einem normalen, oder kommt das von der Grafikkarte?

Also mein Breitbildmonitor unterstützt z. B. 1280x800 und mein 19 Zoll tut das nicht der unterstützt nur 1280x960... Ich könnte ja dann ein Verhältnis ausrechnen und sobald das irgendwie unter einem bestimmten wert liegt mach ich eben diese Breitbild korrektur... Also ich hab mir überlegt einfach ne Checkbox in den Optionendialog zu tun wo man das eben manuell aktivieren kann wenn es einem nicht gefällt.

Ja ich werd mal mit meinem Bruder deswegen reden. Ist halt recht weit weg von uns. Bei der letzten Dus waren es nur 20 levels glaub, wir haben jetzt 80 Levels mit neuen rätseln etc. :-).
Benutzeravatar
eXile
Establishment
Beiträge: 1136
Registriert: 28.02.2009, 13:27

Re: Widescreenproblem

Beitrag von eXile »

Also, irgendwie bin ich doch der Meinung, dass dies alleinige Aufgabe des Monitors ist. Z.B. haben hier die Flachbildschirme die gezeigte Einstellung direkt im Monitor integriert, und ansonsten wäre dies noch höchstens eine Aufgabe des Grafiktreibers. Aber solche schwarzen Balken durch die Anwendung zwangsweise anzeigen zu lassen, lässt bestimmt manche Nutzer fluchen, die solche Möglichkeiten via Treiber oder Hardware besser hinbekommen (siehe auch das Anti-Aliasing-Problem). ;)
Benutzeravatar
TGGC
Establishment
Beiträge: 569
Registriert: 15.05.2009, 18:14
Benutzertext: Ich _bin_ es.
Alter Benutzername: TGGC
Echter Name: Ich _bin_ es.
Wohnort: Mainz
Kontaktdaten:

Re: Widescreenproblem

Beitrag von TGGC »

eXile hat geschrieben:Also, irgendwie bin ich doch der Meinung, dass dies alleinige Aufgabe des Monitors ist. Z.B. haben hier die Flachbildschirme die gezeigte Einstellung direkt im Monitor integriert, und ansonsten wäre dies noch höchstens eine Aufgabe des Grafiktreibers. Aber solche schwarzen Balken durch die Anwendung zwangsweise anzeigen zu lassen, lässt bestimmt manche Nutzer fluchen, die solche Möglichkeiten via Treiber oder Hardware besser hinbekommen (siehe auch das Anti-Aliasing-Problem). ;)
Leider sind 99% aller User nicht in der Lage bei sich das einzustellen. Die werden dann einfach mit der falschen Anzeige spielen.
Tornby
Beiträge: 17
Registriert: 17.09.2010, 15:33

Re: Widescreenproblem

Beitrag von Tornby »

Ok also ich hab jetzt nochmal nachgeschaut mein kleiner Monitor hat auch Auflösungen von 1280x720 :-(. Damit fällt der letzte Versuch wohl weg... Ich guck mir mal nochmal peggle an und schau mal ob die zaubern oder auch von der Desktopauflösung ausgehen...

@TGGC und eXile

TGGC hat recht. Wenn man ein Spiel für Ottonormalverbraucher baut, also Gelegenheitsspieler muss Spiel, Steuerung und Konfiguration so einfach wie möglich gehalten werden. Wir haben lediglich 2 Schieber für Musik und Soundlautstärke sowie eine Fullscreen Checkbox. Auflösungen würden nur verwirren weil ein Großteil der Leute das garnicht verstehen würde was gemeint ist.
Alexander Kornrumpf
Moderator
Beiträge: 2119
Registriert: 25.02.2009, 13:37

Re: Widescreenproblem

Beitrag von Alexander Kornrumpf »

Und wie wäre es einen Buchstaben, Kreis, o.ä. in den gängigen Seitenverhältnissen zu rendern und den Spieler zu fragen welches richtig aussieht?
Tornby
Beiträge: 17
Registriert: 17.09.2010, 15:33

Re: Widescreenproblem

Beitrag von Tornby »

Hab mir schon überlegt son Dialog mit 2 Bildern hochkommen zu lassen wo man zwei so monitorsymbole sieht, breitbild und normal... Aber selbst wenn ich wüßte das es ein Breitbildmonitor ist, kann ich nicht feststellen ob es so ein richtig breiter ist oder ein normaler Widescreen. Kenn jetzt die Verhältnisse nicht aber hab welche auf Arbeit die eben ganz breit sind und welche die schmäler sind. Von daher wüsste ich nicth mal wie ich das Verhältnis machen sollte.

EDIT:

Ich weiß jetzt wie die das bei Peggle machen. Die ändern die Auflösung einfach nich, sondern übernehmen die Destkop Auflösung, wobei die Grafiken dann einfach gestreckt werden... Ich probier mal noch a weng rum.

Danke fur eure Hilfe :-)
Benutzeravatar
TGGC
Establishment
Beiträge: 569
Registriert: 15.05.2009, 18:14
Benutzertext: Ich _bin_ es.
Alter Benutzername: TGGC
Echter Name: Ich _bin_ es.
Wohnort: Mainz
Kontaktdaten:

Re: Widescreenproblem

Beitrag von TGGC »

Gaengige Verhaeltnisse sind 5:4, 4:3, 16:10 und 16:9. Die koennte man als Standards nehmen und das passendeste zum Desktop auswaehlen. Ansonsten halt Schieberegler, mit dem man einen Kreis breitzieht. Da kann dann jeder so nachregeln wie er mag.
Benutzeravatar
eXile
Establishment
Beiträge: 1136
Registriert: 28.02.2009, 13:27

Re: Widescreenproblem

Beitrag von eXile »

Tornby hat geschrieben:Wenn man ein Spiel für Ottonormalverbraucher baut, also Gelegenheitsspieler muss Spiel, Steuerung und Konfiguration so einfach wie möglich gehalten werden. Wir haben lediglich 2 Schieber für Musik und Soundlautstärke sowie eine Fullscreen Checkbox. Auflösungen würden nur verwirren weil ein Großteil der Leute das garnicht verstehen würde was gemeint ist.
Darum ja gerade: Der Monitor muss schlau genug sein, bei der eingehenden Auflösung zwischen Widescreen und einem Modus mit schwarzen Balken links und rechts umzuschalten, und zwar automatisch! Nicht der Softwareentwickler muss diese Konfiguration einfach machen, sondern der Monitorhersteller. Würde man euren Weg wirklich mal konsequent folgen, so hätte man wieder den Inner-Platform-Effect, da man das ganze System nachbildet, um dessen vermeintliche Ungereimtheiten zu umgehen. ;)
Zuletzt geändert von eXile am 17.09.2010, 20:05, insgesamt 1-mal geändert.
Benutzeravatar
Krishty
Establishment
Beiträge: 8268
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Widescreenproblem

Beitrag von Krishty »

Nicht der Monitorhersteller, sondern der GPU-Treiber. Und diesen Weg gibt es bei D3D10+ längst; bei D3D9 leider bloß über viele viele Knöpfe.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
eXile
Establishment
Beiträge: 1136
Registriert: 28.02.2009, 13:27

Re: Widescreenproblem

Beitrag von eXile »

Krishty hat geschrieben:Nicht der Monitorhersteller, sondern der GPU-Treiber. Und diesen Weg gibt es bei D3D10+ längst; bei D3D9 leider bloß über viele viele Knöpfe.
Wie gesagt, hier gibt es am Monitor die Einstellung im OSD. Ob man das in der Anzeigehardware selbst, Ob das jetzt im Treiber, oder im Monitor passiert, darüber kann man sich naütrlich vortrefflich streiten. Im meinem ersten Post in diesem Thread hatte ich ja auch auf diese Möglichkeit hingewiesen. Der Weg über den Treiber hat natürlich den Vorzug der Flexibilität, welche so durch die feste Firmware des Monitors nicht gegeben ist.
Alexander Kornrumpf
Moderator
Beiträge: 2119
Registriert: 25.02.2009, 13:37

Re: Widescreenproblem

Beitrag von Alexander Kornrumpf »

eXile hat geschrieben:
Tornby hat geschrieben:Wenn man ein Spiel für Ottonormalverbraucher baut, also Gelegenheitsspieler muss Spiel, Steuerung und Konfiguration so einfach wie möglich gehalten werden. Wir haben lediglich 2 Schieber für Musik und Soundlautstärke sowie eine Fullscreen Checkbox. Auflösungen würden nur verwirren weil ein Großteil der Leute das garnicht verstehen würde was gemeint ist.
Darum ja gerade: Der Monitor muss schlau genug sein, bei der eingehenden Auflösung zwischen Widescreen und einem Modus mit schwarzen Balken links und rechts umzuschalten, und zwar automatisch! Nicht der Softwareentwickler muss diese Konfiguration einfach machen, sondern der Monitorhersteller. Würde man euren Weg wirklich mal konsequent folgen, so hätte man wieder den Inner-Platform-Effect, da man das ganze System nachbildet, um dessen vermeintliche Ungereimtheiten zu umgehen. ;)
Ich habe hier noch einen uralt TFT, der immer in der nativen Auflösung bleibt, das Bild also nicht streckt. Ich garantiere dir, das ist NICHT das was Otto Normalverbraucher will. Er wird denken der Monitor sei kaputt, weil ein Teil des Bildes schwarz bleibt.

Wenn sich Otto einen neuen Widescreen kauft, und an den an seinen Rechner anstöpselt dann liefert der Rechner einfach weiter das alte 1024*768 Signal, der Monitor streckt das und Otto ist zufrieden und freut sich dass er nun alles viel größer sieht. Das kennt er nämlich von seinem neuen Widescreen Fernseher, der macht auch alles viel größer.

Ich denke der default "Strecken" stellt einen größeren Prozentsatz der Käufer zufrieden und sorgt für weniger Hotline Anrufe. Da ist es egal das es technisch eigentlich unsinnig ist.
Benutzeravatar
Jonathan
Establishment
Beiträge: 2398
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: Widescreenproblem

Beitrag von Jonathan »

Tornby hat geschrieben:TGGC hat recht. Wenn man ein Spiel für Ottonormalverbraucher baut, also Gelegenheitsspieler muss Spiel, Steuerung und Konfiguration so einfach wie möglich gehalten werden. Wir haben lediglich 2 Schieber für Musik und Soundlautstärke sowie eine Fullscreen Checkbox. Auflösungen würden nur verwirren weil ein Großteil der Leute das garnicht verstehen würde was gemeint ist.
Andererseits werden sich andere Leute darüber ärgern, dass man bestimmte Dinge nicht einstellen kann. Die Lösung diese anderen Optionen hinter der Schaltfläche "Erweiterte Optionen" zu verstecken find ich da schon ganz gut, dann können die, die Ahnung haben sie wenigstens ändern.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
TGGC
Establishment
Beiträge: 569
Registriert: 15.05.2009, 18:14
Benutzertext: Ich _bin_ es.
Alter Benutzername: TGGC
Echter Name: Ich _bin_ es.
Wohnort: Mainz
Kontaktdaten:

Re: Widescreenproblem

Beitrag von TGGC »

Alexander Kornrumpf hat geschrieben:
eXile hat geschrieben:
Tornby hat geschrieben:Wenn man ein Spiel für Ottonormalverbraucher baut, also Gelegenheitsspieler muss Spiel, Steuerung und Konfiguration so einfach wie möglich gehalten werden. Wir haben lediglich 2 Schieber für Musik und Soundlautstärke sowie eine Fullscreen Checkbox. Auflösungen würden nur verwirren weil ein Großteil der Leute das garnicht verstehen würde was gemeint ist.
Darum ja gerade: Der Monitor muss schlau genug sein, bei der eingehenden Auflösung zwischen Widescreen und einem Modus mit schwarzen Balken links und rechts umzuschalten, und zwar automatisch! Nicht der Softwareentwickler muss diese Konfiguration einfach machen, sondern der Monitorhersteller. Würde man euren Weg wirklich mal konsequent folgen, so hätte man wieder den Inner-Platform-Effect, da man das ganze System nachbildet, um dessen vermeintliche Ungereimtheiten zu umgehen. ;)
Ich habe hier noch einen uralt TFT, der immer in der nativen Auflösung bleibt, das Bild also nicht streckt. Ich garantiere dir, das ist NICHT das was Otto Normalverbraucher will. Er wird denken der Monitor sei kaputt, weil ein Teil des Bildes schwarz bleibt.

Wenn sich Otto einen neuen Widescreen kauft, und an den an seinen Rechner anstöpselt dann liefert der Rechner einfach weiter das alte 1024*768 Signal, der Monitor streckt das und Otto ist zufrieden und freut sich dass er nun alles viel größer sieht. Das kennt er nämlich von seinem neuen Widescreen Fernseher, der macht auch alles viel größer.

Ich denke der default "Strecken" stellt einen größeren Prozentsatz der Käufer zufrieden und sorgt für weniger Hotline Anrufe. Da ist es egal das es technisch eigentlich unsinnig ist.
Absolut.

@Jonathan: Ich sag ja nichts dagegen Einstellmoeglichekeiten fuer Profis zu machen (darum sagte ich ja auch, mann soll manuell waehlen koennen). Nur hat man damit trotzdem noch keine Loesung fuer die meisten User gefunden.
Antworten