Skalierung bei Auflösungsumschaltung

Posted By: Meerkat

Skalierung bei Auflösungsumschaltung - 06/23/11 10:38

Hallöchen,

vielleicht kann mir einer von euch einmal über die Straße helfen. Irgendwie schein ich entweder ein Verständnissproblem zu haben oder meine Formel ist schlicht und ergreifend falsch.

Zum Thema. Ich arbeite derzeit an der Positionsskalierung eines Panelsstücks (eine Entity*). Die Positionsskalierungen berechne ich mit der Formel:

Code:
PanelScale_x = screen_size.x/1920;
PanelScale_y = screen_size.y/1080;

Uhr_ent.y = -16; //Y entspricht der 2D X-Koordinate
Uhr_ent.z = -11.851; //Z entspricht der 2D Y-Koordinate

Uhr_ent.y = Uhr_ent.y * PanelScale_x; 
Uhr_ent.z = Uhr_ent.z * PanelScale_y;



Wende ich das auf ganz normale 2D PANELS an, funktioniert alles wunderbar da die 0 X,Y-Koordinate oben links in der Mitte des Bildschirms liegt.

Wende ich das allerdings auf die Entity (Uhr) an, dann stimmt irgendwie nichts. Die Uhr ist nicht da wo sie sein sollte. Ich habe heraus gefunden das bei der Entity die 0 Y,Z, Koordinate in der Mitte des Bildschirms liegt. Ich weiss nicht wie ich damit umgehen soll. Kann mir vielleicht jemand einen Tip geben? Achtung, ich berechne auch gleichzeitig die Bildformate (4:3, 16:10, 16:9) um da ich alle 3 verwenden möchte.


Mit freundlichem Gruß

Rudi
Posted By: Pappenheimer

Re: Skalierung bei Auflösungsumschaltung - 06/23/11 11:51

Falls sich diese Eigenschaft jetzt nicht seit A5 geändert haben sollte wink , ist es so, dass die Entity nicht auf der Ebene der Panels liegt, sondern einen Abstand zum View hat, den Du einstellen kannst.
Die Entity ist also in einem 3D-Raum relativ zum Bildschirm platziert.

Schreib Dir eine einfache Funktion, mit der Du die Entity mittels Tasten bewegen (und drehen!) kannst und über die Dir die aktuellen Positionswerte angezeigt werden, dann bewege die Entity solange, bis Du die richtige Position und Drehung gefunden hast. Notiere Dir die Werte und trage sie im Script ein.
Vorteil: diese Werte sollten gelten, egal welche Bildauflösung etc. Du hast, da die Entity immer relativ zur Bildschirmmitte positioniert wird.
Posted By: Meerkat

Re: Skalierung bei Auflösungsumschaltung - 06/23/11 13:07

Tun sie aber nicht. Dann bräuchte ich ja nichts ändern. Das genau ist ja mein Problem. laugh
Posted By: Pappenheimer

Re: Skalierung bei Auflösungsumschaltung - 06/23/11 13:29

Leider geht aus Deiner Antwort nicht heraus hervor:
1. Ob Du meine antwort vollständig gelesen und verstanden hast, und
2. ob Du etwas entsprechendes getestet hast.

Wenn Du Hilfe haben möchtest, solltest Du weniger wortkarg sein! tongue smirk

Ich habe es grad vorsichtshalber getestet:
solange Du die Seitenverhältnisse gleichbleiben, bleibt das Model bei jeder Bildgröße an exakt der gleichen Stelle.
Du müsstest also für die 3 Bildformate (4:3, 16:10, 16:9) jeweils eine Bildposition herausfinden und fest eintragen.
Da - wie erwähnt - das Model sich im 3D-Raum befindet, kann man nicht das System der Panelpositionierung einszueins darauf übertragen. Es ist sogar schwierig ein System überhaupt zu schreiben, da die Position z.B. auch vom arc des Views abhängt.

Was Du probieren könntest, ist, das Ganze auf isometrisch umstellen, wobei ich dann nicht sagen kann, wie das Ganze dann reagieren wird.
Posted By: Myrkling

Re: Skalierung bei Auflösungsumschaltung - 06/23/11 13:56

Falls nötig, kannst du auch rel_to_screen und rel_for_screen verwenden, um Viewentity-Koordinaten in Bildschirmkoordinaten zu konvertieren und umgekehrt.
Posted By: Meerkat

Re: Skalierung bei Auflösungsumschaltung - 06/23/11 13:56

Okok, dann hab ich doch richtig vermutet. Ich muss für die 3 Seitenverhältnisse echt alles selbst setzen. Und ja, ich hab deine Antwort schon verstanden. ^^ Muss ich mir halt das cm Maß nehmen und alles genau ausmessen damits gleich is. grin Danke dir für deine Hilfe. laugh
Posted By: HeelX

Re: Skalierung bei Auflösungsumschaltung - 06/23/11 16:23

Hm, also einerseits ist das ganz cool, dass View-Entities "mitskalieren" bei einem Auflösungswechsel, allerdings haben View-Entities auch eklatante Mängel. Und zwar insbesondere in Bezug auf das Bildschirmverhältnis (wie Achim bereits anriss) und dann auch noch in Bezug auf den camera->arc.

Eine Alternative wäre es, das Modell in einem seperaten View zu rendern und das render target in einem Panel darzustellen. Damit kombiniert man eigentlich ganz gut die Vorzüge von Panels und die Coolness von 3D Modellen.

Dann hast du aber weiterhin das Problem, dass man die Panels weiterhin händisch neu skalieren muss, was an sich blöd ist. Da könntest du aber wiederum folgenden Trick aus der Krabbelkiste der Konsolenspiel-Portierungen anno dazumal anwenden, und zwar renderst du das HUD immer auf der gleichen Auflösung und legst das render-Ergebnis einfach auf die Kamera drauf. Einziges Problem was jetzt noch besteht, ist, dass man eventuell die ganze Zeit das HUD in ner zu hohen Auflösung rendert und wieder Speicher verschwendet - andererseits sieht das dann auch wieder blurry aus, wenn man eine höhere Auflösung als die Referenzauflösung fährt.

Insgesamt sind auflösungsunabhängige HUDs ne ziemlich perfide Angelegenheit weil man überall, egal was man macht, Probleme hat. Gerade jetzt, wo jeder Hanswurst mit seinem 08/15 Breitbildbildschirm das schöne, etablierte, 4:3 Verhältnis kaputt macht. Da muss man sein HUD sowieso auf jede Unwägbarkeit diesbezüglich dynamisch anpassen. Ärgerlich sowas.

Am besten ist es, man verzichtet komplett drauf und lässt sich was ganz innovatives einfallen. Ich hab gestern Dead Space angezockt und bin ein wenig neidisch auf die Idee, das HUD in die 3D Szene reinzuprojizieren.. - genial!
© 2024 lite-C Forums