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

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

1

12.11.2013, 14:48

Texturekoordinaten berechnen

Moin.
Ich suche einen Weg, um Texturekoordinaten automatisch zu berechnen.
Sagen wir ich habe ein Quad (also vier Vertices) und erweitere dies um zwei andere, so das es ein Sechseck entsteht. Dann ändern sich die Texturekoordinaten ja wie folgt:

(Link)

Nun möchte ich dies automatisch für jede beliebige Form berechnen lassen. Dazu durchsuche ich bisher die Vertices nach Minima und Maxima für x und y, errechne mir aus diesen die x und y Differenz und gehe dann Vertex für Vertex durch, ziehe das jeweilige Minima ab und teile dies dann durch die Differenz. Hier einmal meine Implementation in D: http://codepad.org/vqHxfU6i. Das klappt auch (jedenfalls in meinen Tests) ganz gut, ist aber meiner Meinung nach nicht der effizienteste Weg.
Welche anderen Wege gibt es und was wäre am effizientesten?
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

12.11.2013, 15:04

Dein Ansatz dürfte bei gedrehten Rechtecken versagen, oder?
Was du eigentlich tun müsstest ist eine Koordinatensystemtransformation von Weltkoordinaten nach Texturkoordinaten zu errechnen (aus den vorhandenen Eckpunkten und ihren Texturkoordinaten). Dann kannst du für neue Eckpunkte einfach die Texturkoordinaten errechnen, indem du deren Weltkoordinaten in die Transformation steckst.
Du musst also herausfinden, welche Weltkoordinaten die Texturkoordinaten (0, 0) haben und entlang welcher Richtungen im Weltkoordinatensystem die u- und v-Achse verlaufen (inkl. Skalierung).

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

3

12.11.2013, 15:15

Ich glaub du überschätzt mein Verständnis. Das klingt auf den ersten Blick etwas kompliziert. Wie errechne ich denn, welche Weltkoordinaten meine Texturekoordinaten haben?
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

4

12.11.2013, 16:07

Crosspost zu hier?
http://www.delphigl.com/forum/viewtopic.php?f=10&t=11028
Sehr wahrscheinlich, beide Leute verwenden D. ^^

Zitat

Wie errechne ich denn, welche Weltkoordinaten meine Texturekoordinaten haben?

Am Besten gar nicht. Ich habe dir dort im letzten Post schon geschrieben, wie ich es mache.

Wegen gedrehten Rechtecken: Ich würde einfach die Texturekoordinaten vor der Transformation berechnen, dann dreht sich die Textur auch mit, weil sich an Texturkoordinaten der Eckpunkte nichts ändert. Für andere Texturausrichtungen würde ich empfehlen, eine Texturematrix Transfomation zu verwenden. Das heißt das Rechteck (oder ein beliebiges anderes Objekt) bestitzt nicht nur eine eigene Transformation die die Ausrichtung der Vertices bestimmt sondern auch eine Texturmatrix die nur auf die Texturkoordinaten angewendet wird. Das Verfahren ist vergleichsweise flexibel und schnell weil das auch die GPU im Geometrie-/Vertexshader machen kann.

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

5

12.11.2013, 16:30

Richtig, aber ich glaube das Bild ist verräterischer als nur die Sprache D. :D Dort ist immer mein erster Anlaufpunkt.
Das ist mir leider alles nicht ganz klar, ich brauche leider immer ein Beispiel an dem ich mir orientieren kann. Eventuell ist es aber auch nicht ganz durchgedrungen was ich machen will:
Ich möchte lediglich eine Texture auf ein Shape bringen. Und dieses kann mit der Zeit Vertices dazu bekommen oder loslösen und je nachdem sollen sich die Texture Koordinaten anpassen. Alles im 2D Bereich. Vllt. hätte ich letzteres schon früher erwähnen sollen. :)
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

6

12.11.2013, 16:58

Zitat

Das ist mir leider alles nicht ganz klar

Was ist den konkret das Problem?

Zitat

ich brauche leider immer ein Beispiel an dem ich mir orientieren kann.

Ich weiß leider nicht wirklich, was ich da an Beispielen geben soll. Die Funktionsweise und den Zweck von Matrixen solltest du verstanden haben.

Zitat

Und dieses kann mit der Zeit Vertices dazu bekommen oder loslösen und je nachdem sollen sich die Texture Koordinaten anpassen.

Ich glaube, du weißt selber noch nicht ganz, was du eigentlich willst.
Du hast eine x-beliebige Form und willst irgendwie da eine Textur darauf bekommen.

Das Minimum und Maximum zu bestimmen, halte ich halt für keine gute Idee. Zum einen ist es Performancemäßig schlecht und auf der GPU schwierig umzusetzen und zum Anderen hängen damit die Texturkoordiaten eines Punktes von allen anderen ab. Man stelle sich irgendein Polygon vor mit einen Farbverlauf. Wenn man jetzt irgendwo einen weiteren Eckpunkt außerhalb des momentanen Minimums/Maximums zu dem Polygon hinzufügt, wird sich auch der Farbverlauf auf den restlichen Teil des Polygons ändern, auch wenn du dort nichts verändert hast. Ich glaube, dass dieses Verhalten in einer 2D Engine meistens unerwünscht wäre.

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

7

12.11.2013, 17:12

Doch ich weiß sehr genau was ich möchte. :) Und zwar eine Texture auf ein 2D Shape mappen, egal welche Form das Shape hat. Um das mal zu spezifizieren: die Textur soll z.B. auf ein Quad gemappt werden, dann wird daraus ein Fünfeck, Sechseck usw. und die Texture passt sich der Form an. Ich kann dir gern ein Bild dazu malen. ;)
Und natürlich sind mir Sinn und Zweck von Matrizen klar, aber ich denke nicht das ich sie hierfür verwenden kann. Ich werde noch ein wenig selbst herumprobieren und ansonsten meine bisherige Methode verwenden.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

8

12.11.2013, 17:26

Zitat

die Textur soll z.B. auf ein Quad gemappt werden

Joa, eben. ;)
Mappen ist eine ziemlich unpräzise Bezeichnung. Das kann man auf verschiedenste Weise machen.
Wenn du willst, dass sich die Texture immer auf beliebige Vertices skaliert, dann ist die Methode die du nimmst, die einzig Mögliche. Ich kann mir nur nicht vorstellen, dass du das wirklich so willst. ;)

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

9

12.11.2013, 17:37

Skalieren? Von vorne.
Ich habe ein Quad auf dem eine Textur gezeichnet wird. Das heißt das komplette Quad ist mit dieser Texture tapeziert wenn man so will. Oder auch: die Texture wird auf dieses Quad aufgespannt. Kommt eine weitere Ecke dazu, werden die Texture Koordinaten so angepasst, dass die Texture wieder die komplette Fläche einnimmt und sich der neuen Form anpasst. Nennt man das skalieren? Ich verbinde damit irgendwie was anderes aber vllt. lern ich ja mal wieder was dazu. Und genau das möchte ich.
So das wenn wir dieses Spielchen weiter treiben, sagen wir 30 mal, das ich einen Kreisförmigen Ausschnitt meiner Texture auf meinem Kreis Shape habe. So wie in dem von dir verlinkten Thread. Nochmal das Bild:

(Link)
Dieser kreisförmige Ausschnitt. Meine Texture Koordinaten haben sich dem Kreis angepasst und meine Kreis Shape wird mit einem Kreisförmigen Ausschnitt der Texture bespannt. Genau das möchte ich. Ich kann mich wahrscheinlich einfach nur schlecht ausdrücken weil mir die nötigen Fachbegriffe fehlen.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

12.11.2013, 18:16

Wie genau "erweiterst" du dein Quad? Wie werden die Vertices des Quad generiert, wie die des Sechsecks?

Werbeanzeige