Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: Spiele-/Grafikprogrammierung ::  Texturkoordinaten berechnen     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
tapezierer
Unregistrierter




Beitrag tapezierer Unregistrierter 17:40:37 09.09.2017   Titel:   Texturkoordinaten berechnen            Zitieren

Ich möchte gerne für ein beliebiges Polygon Texturkoordinaten so berechnen, dass die Ränder der Textur sich den Rändern des Polygons befinden. Hier ist ein Bild, wie ich das meine: https://s26.postimg.org/5912r91gp/tex_mapping.png
Ist mit GIMP gefaked, aber ich hoffe, es wird klar, was gemeint ist.

Das 'A' links ist das untexturierte Polygon. Das rote Rechteck mit dem Bevel ist die Textur und so wie rechts soll das Ergebnis (ungefähr) aussehen. Was in der Textur links/oben ist, soll auf dem Polygon auf den linken/oberen Rändern sein. Das Gleiche für rechts/unten.

Ist das überhaupt so umsetzbar? Ich sehe da ein paar Problemstellen, wo es evtl. nicht geht und vielleicht die Textur anders aussehen müsste, um das Endergebnis zu bekommen.

Ich weiß nicht, wonach ich bei Google suchen soll, um brauchbare Resultate zu finden. Gibt doch sicher einen Fachbegriff für so ein Mapping?
tapezierer
Unregistrierter




Beitrag tapezierer Unregistrierter 17:43:54 09.09.2017   Titel:              Zitieren

Bzw. mehrere Polygone, weil das A ein doofes Beispiel ist. Fällt mir gerade auf. Es soll halt mit Löchern funktionieren.
XMAMan
Mitglied

Benutzerprofil
Anmeldungsdatum: 07.02.2011
Beiträge: 271
Beitrag XMAMan Mitglied 14:03:23 10.09.2017   Titel:              Zitieren

Der leichteste Ansatz wäre, wenn du eine Boundingbox um das A machst und dann für jeden Eckpunkt von den A schaust, an welcher Stelle in der Boundingbox liegt der Punkt.

https://s26.postimg.org/b6rl2t6o9/tex_mapping.png

Ich hab mal für zwei Beispielpunkte angegeben, welche Texturkoordinaten diese dann haben würden.

Bei diesen Lösungsweg werden dann das Loch, was beim A ist nicht mit aus der Textur genommen.

Willst du eine Lösung, bei der ein Rechteck so verformt wird, dass du damit jedes beliebige Polygon bekommst? Wenn ja, denke ich, dass das eine schwierige Aufgabe werden dürfte.

_________________
Anfänger vom Dienst und Raytracingfreund
tapezierer
Unregistrierter




Beitrag tapezierer Unregistrierter 15:52:35 10.09.2017   Titel:              Zitieren

Wenn ich deinen Ansatz richtig verstehe, wären die Texturkoordinaten ja bloß die normalisierten Punkte des Polygons. Damit sähe ich auf dem A nur den Ausschnitt der Textur, den das A abdeckt. Ich möchte aber die gesamte Textur in die Fläche des Polygons quetschen.

Zitat:
Willst du eine Lösung, bei der ein Rechteck so verformt wird, dass du damit jedes beliebige Polygon bekommst?

Idealerweise ja, es muss aber kein Rechteck sein.
XMAMan
Mitglied

Benutzerprofil
Anmeldungsdatum: 07.02.2011
Beiträge: 271
Beitrag XMAMan Mitglied 19:17:55 10.09.2017   Titel:              Zitieren

In diesem Falle möchte ich auf folgenden Beitrag hinweisen. Hier geht es zwar um 3D und nicht um 2D-Texturemapping aber von der Aufgabenstellung klingt es ähnlich.

https://www.c-plusplus.net/forum/339647

_________________
Anfänger vom Dienst und Raytracingfreund
tapezierer
Unregistrierter




Beitrag tapezierer Unregistrierter 19:26:28 12.09.2017   Titel:              Zitieren

Ach Mann, und ich hatte gehofft jemand kommt und schreibt "Das ist Dowhatisay-Mapping und hier is wies geht du Kacknoob"
hustbaer
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.10.2006
Beiträge: 23750
Beitrag hustbaer Mitglied 20:42:52 12.09.2017   Titel:              Zitieren

Ich würde sagen das geht einfach nicht.

Deine Textur hat kein Loch, das Ziel-Polygon hat aber eins (bzw. kann eins haben - oder vermutlich sogar mehrere?).
Vermutlich könnte man da jetzt *irgend ein* Mapping machen das deine Vorgabe "Ränder sollen Ränder bleiben" erfüllt. Aber halt kein "stetiges", und vermutlich auch keines wo du die Texturkoordinaten der verschiedenen Vertices linear interpolieren kannst. Anders gesagt: vermutlich nichts womit du glücklich würdest.

Beschreib mal was du damit machen/erreichen willst. Vielleicht gibt's ja eine andere Lösung die für dich akzeptabel wäre. Und vor allem machbar ist ;)

----

ps: Bei deinem Beispiel-Bild musste ich an "distance field fonts" denken. Wäre natürlich Zufall wenn das auf dein Problem anwendbar wäre, aber da es so ne coole Technik ist wollte ich es trotzdem erwähnen :)

_________________
Until every person can enjoy all their human rights, we will not stop. I support Amnesty International. Will you?
https://www.amnesty.org / https://www.amnesty.de / https://www.amnesty.at
tapezierer
Unregistrierter




Beitrag tapezierer Unregistrierter 17:16:04 13.09.2017   Titel:              Zitieren

Über Distance Fields habe ich auch schon nachgedacht und sogar schon eine halbwegs brauchbare distance transform für Bitmaps implementiert, um damit outlines um Grafiken und Schriften zu ziehen. Mir fehlt das Know-How, um aus diesem Ansatz mehr zu machen.

Zitat:
Beschreib mal was du damit machen/erreichen willst.

2 Ziele: Ich möchte für ein 2D-Spiel einen Editor bauen, wo man beliebige Polygone in die Welt malen kann, die dann mit dieser Technik texturiert werden sollen. Und ich möchte damit Schriftzüge texturieren, die auch als Polygone vorliegen, die ich mit Freetype aus Truetype-Fonts generiere. Dafür möchte ich möglichst simple Stil-Vorlagen definieren können, idealerweise einfach nur mit einem entsprechend gestylten Rechteck.

Mir geht es dabei vor allem darum, dass die Ränder gut aussehen. Ich könnte gut damit leben, wenn es in "der Mitte" nicht korrekt funktioniert, dann ist dort eben immer alles einfarbg.
C++ Forum :: Spiele-/Grafikprogrammierung ::  Texturkoordinaten berechnen   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.