Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

05.04.2012, 07:53

Kissenverzerrung

Hi,

ich habe ein Ausgabemedium, dass mir eine recht eigenwillige Kissenverzerrung erzeugt. D.h. wenn ich dort ein Quadrat zeichne, erhalte ich sowas wie das hier:

(Link)


Die Verzerrung wird zum Rand des Ausgabebereiches hin immer stärker, zur Mitte hin geht sie gegen Null.

Das würde ich jetzt gerne ausgleichen, sprich meine Vektorgrafiken müssten so in die jeweils andere Richtung vorverzerrt werden, dass das Ergebnis trotz verzerrender Ausgabe wieder ein Quadrat ist.

Die Linien, aus denen die Kanten des Quadrates bestehen, setzen sich schon aus sehr vielen kurzen Teillinien zusammen, d.h. ich brauche nur noch eine Berechnung auf Basis einzelner Koordinaten.

Nur: wie berechne ich sowas? Als Parameter muss der Benutzer jeweils für X und Y die Stärke der Krümmung angeben und deren Richtung (da die Verzerrung ja nach innen oder außen gehen kann).

Oder gibt es eventuell sogar schon fertige Lösungen für sowas? Die alten CRT-Monitore hatten ja eine relativ ähnliche Verzerrung...

Edit: der Link zum eingebetteten Bild geht nicht: http://desmond.imageshack.us/Himg713/sca….png&res=medium

Sp3iky

Treue Seele

Beiträge: 232

Beruf: Entwicklungsingenieur

  • Private Nachricht senden

2

05.04.2012, 08:28

Hi,

das Ganze ist leider komlizierter, als man es am Anfang denken mag.

Auf Wikipedia gibts einen kurzer Abschnitt dazu, der dir weiterhelfen kann: http://en.wikipedia.org/wiki/Distortion_(optics)

Grundproblem ist eigentlich, dass es sich um eine nichtlineare Transformation handelt.

3

05.04.2012, 10:19

Autsch...die deutsche Wiki-Version unter http://de.wikipedia.org/wiki/Verzeichnung liefert ja sogar noch eine Formel zur Berechnung, leider fällt mir jetzt eben erst auf, dass meine Verzerrung eben keine reine Kissen- oder Tonnenverzerrung ist, sondern die beiden in X-/Y-Richtung miteinander kombiniert. D.h. ich kann die Wiki-Formel schon wieder nicht mehr als Ausgangspunkt verwenden...

Sp3iky

Treue Seele

Beiträge: 232

Beruf: Entwicklungsingenieur

  • Private Nachricht senden

4

05.04.2012, 10:36

Je nach Anwendungsfall gäbe es noch die Möglichkeit für die spezielle Projektionsfläche eine Kalibrierung durchzuführen. Funktionieren würde dies mit Hilfe einer Kamera. Für die Kalibrierung gibt es dann verschiedene Ansätze über die Projektions von Linienmustern zum Beispiel.
Was du dann hoffentlich raus bekommst ist eine möglichst genaue Lookup-Tabelle, in dem für jeden Pixel der Korrekturfaktor enthalten ist.

In der Praxis ist das aber häufig deutlich schwieriger, da man dann auch alle Parameter der Kamera (sowohl die internen, wie Verschiebungen und Verzerrungen aufgrund der Einbaulage des Sensors, Verzerrung der Linse usw., als auch die externen, wie Kameraposition und Ausrichtung im Verhältnis zum Bildschirm) kennen muss. Die musst du dann also auch erst kalibireren (gibt auch Libs dafür)...dann machen noch unterschiedliche Lichtverhältnisse usw. Probleme. Grundsätzlich ist es aber machbar.

Mastermind

unregistriert

5

05.04.2012, 10:43

Das würde ich jetzt gerne ausgleichen, sprich meine Vektorgrafiken müssten so in die jeweils andere Richtung vorverzerrt werden, dass das Ergebnis trotz verzerrender Ausgabe wieder ein Quadrat ist.


Das kann ja schon deshalb nicht gehen weil die Verzerrung die du dort einrechnen müsstest davon abhängig ist an welche Position die Grafik später gerendert wird. Skalierung würde den Effekt ebenfalls kaputt machen usw. usw.

6

05.04.2012, 10:53

Aaaalso...das mit der Kalibrier/Lookuptabelle gibts schon, da wird einfach ein Grid von z.B. 100x100 Koordinaten verwendet, mit dem dann die Ausgabedaten korrigiert werden. Der Gag: es gibt Programme, die errechnen solche Korrekturtabellen aus X- und Y-Winkelangaben, d.h. die haben schon irgend einen Weg gefunden, diese Verzerrung in Koordinaten zu gießen. Leider verstehe ich nicht so ganz, wie die das machen :-)

@Mastermind: Verschiebung/Skalierung etc. sind kein Problem, die sind in meiner Grafik schon drin. D.h. die Vektorgrafik ist schon komplett für das Ausgabemedium vorbereitet, es wird daran nichts mehr verändert, so dass die Kissenkorrektur bedenkenlos angewendet werden könnte. Die Verzerrung wird also immer erst kurz vor der Ausgabe der Grafiken einberechnet.

ArthurII

Treue Seele

Beiträge: 132

Wohnort: Aachen

Beruf: Student

  • Private Nachricht senden

7

05.04.2012, 12:59

Also vll. lasse ich hier mal eben ein paar Erkenntnisse meiner Mechanik 2 Vorlesung einfließen:

Wenn ich ein Objekt in die eine Richtung dehne, dehnt es sich in den anderen Richtungen mit, entsprechend der so genannten Querkontraktion:
§\epsilon = \frac{1}{E}(\sigma_x - \nu ( \sigma_y + \sigma_z)) + \alpha \Delta \theta§

Dabei ist:
§\epsilon§ die Dehnung
§E§ das E-Modul
§\nu§ die Querkontraktionszahl
§\sigma_i§ die Spannungen in den Achsen
§\alpha \Delta \theta§ Anteil für die Temperatur -> fällt denke ich weg


Die Formel ist zwar Linear und für Festkörper als ganzes aber vll hilft es ja...
Ich bin nicht verrückt - nur verhaltensoriginell!
Project-Seite: Aura

Werbeanzeige