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

24.01.2011, 11:01

U - und V Koordinaten berechnen

Hallo Zusammen

Ich verstehe was die uv - Koordinaten sind, und wie diese Angegeben werden müssen.

Meine Frage aber ist, wie kann ich diese berechnen?
Bzw. Wenn ich ein beliebiges Vieleck im Raum habe, wie komme ich dann auf sinnvolle uv - Koordinaten? damit die Textur auch einigermassen sinnvoll darauf zu sehen ist?

Danke und Gruss
Master Chief

Fireball

Alter Hase

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

2

24.01.2011, 11:11

Spherical und Cylindrical Mapping

Hallo,

die einfachste Lösung wäre wenn du dir dir U V Koordinaten von deinem Raytraicer berechnen lässt.

Wenn du es selber machen musst, dann solltest du dich mal mit Spherical und Cylindrical Mapping beschäftigen.

In dem Buch
Introduction to 3D game programming with DirectX 9.0c: a shader approach

Von Frank D. Luna

wird das alles beschrieben. Das Buch findest du bei google book, auf seite 297 gehts dann los.

Gruß

Fb

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

24.01.2011, 11:12

Wenn du die Eckpunkte des Vielecks hast und definieren kannst was für dich "einigermaßen sinnvoll" bedeutet dann sollte es doch kein Problem sein die Texturkoordinaten dafür zu bestimmen!?
Für ein planares Vieleck würde ich es beispielsweise als "sinnvoll" erachten die bounding box des Vielecks zu bestimmen und dann die Koordinaten der Eckpunkte relativ zu dieser bounding box zu berechnen.

4

24.01.2011, 16:37

Hallo Zusammen

Danke für eure Antworten.

Habe selber herausgefunden wie das funktioniert, oder wie man das machen kann.

Man muss von einem Basispunkt ausgehen (am einfachsten ist hier der 1 Punkt des Objektes). Von dort aus spannt man ein Koordinatensystem auf. Die X – (bzw. U) Achse wird anhand des 2 Punktes ermittelt. Wobei die Y – (bzw. V) Achse anhand des Kreuzproduktes zwischen der X – Achse und der Normalen der Fläche berechnet wird. Wenn dieses Koordinatensystem einmal steht, müssen nur noch die einzelnen Punkte des Objektes auf die beiden Achsen proijeziert werden. Der Abstand dieses Punktes zum Basispunkt, ist dann die U – bzw. V – Koordinate.

Keine Ahnugn ob das Verständlich war, aber so funktioniert das wunderbar =)

5

24.01.2011, 19:11

Und was passiert, wenn eine fläche deines Objekts senkrecht zu deinen Achsen steht?

6

24.01.2011, 21:02

dann hat er ein vierdimensionales objekt °_°
scherz beiseite... wo hast du eine Fläche, die senkrecht auf eine textur steht?
Gewinnen ist, wenn man einmal mehr aufsteht, als man zu Boden geht.

buggypixels

Treue Seele

Beiträge: 125

Wohnort: Meerbusch

Beruf: Programmierer

  • Private Nachricht senden

7

25.01.2011, 12:57

Hallo Zusammen

Danke für eure Antworten.

Habe selber herausgefunden wie das funktioniert, oder wie man das machen kann.

Man muss von einem Basispunkt ausgehen (am einfachsten ist hier der 1 Punkt des Objektes). Von dort aus spannt man ein Koordinatensystem auf. Die X – (bzw. U) Achse wird anhand des 2 Punktes ermittelt. Wobei die Y – (bzw. V) Achse anhand des Kreuzproduktes zwischen der X – Achse und der Normalen der Fläche berechnet wird. Wenn dieses Koordinatensystem einmal steht, müssen nur noch die einzelnen Punkte des Objektes auf die beiden Achsen proijeziert werden. Der Abstand dieses Punktes zum Basispunkt, ist dann die U – bzw. V – Koordinate.

Keine Ahnugn ob das Verständlich war, aber so funktioniert das wunderbar =)
Naja, das ist fast korrekt. Ich kenne Deinen Fall nicht, aber es scheint, Du hast eine Lösung für Deinen speziellen Fall gefunden. Denn das mit X- und Y-Achse stimmt so pauschal nicht.
Nehmen wir an, Du hast eine Fläsche mit vier Punkten (um es einfach zu halten):

Quellcode

1
1----2|      |4----3



Die UV Koordinaten sind eine zweidimensionales Koordinatensystem im sogenannten "local space", also bezogen auf Deine Fläsche. Wo du den Ursprung hinlegst, hängt von der Textur und der Ausrichtung der Fläche ab. In dem Beispiel oben wäre sicherlich der Punkt 1 sinnvoll.
Damit zeigt u von Punkt 1 nach Punkt 2 und v von Punkt 1 nach Punkt 4. In Deinem Fall als X- und Y-Achse bezeichnet.

Somit hätten die 4 Punkte folgende Koordinaten

Quellcode

1
1: u = 0.0 v = 0.02: u = 1.0 v = 0.03: u = 1.0 v = 1.04: u = 0.0 v = 1.0



1.0 bedeutet natürlich, dass Du die volle Größe der Textur nimmst. Die uv Koordinaten sind ja normalisiert. Wenn Du nur einen Ausschnitt aus der Textur verwenden willst, dann musst die natürlich berechnen.
Beispiel:
Textur ist 256x256 Pixel groß. Du willst aber nur das Rechteck von 0,0 bis 128,128 anzeigen. Dann ist u2

Quellcode

1
128/256 = 0.5



Denk Dir einfach ein 2D Koordinatensystem projeziert auf Deine Fläche.

8

25.01.2011, 19:25

dann hat er ein vierdimensionales objekt °_°
scherz beiseite... wo hast du eine Fläche, die senkrecht auf eine textur steht?

Naja, ich hatte ihn so verstanden, das er das UV-System bei einer Fläche anlegt, und für das ganze Objekt verwendet. Und dann wäre jede Fläche, die senkrecht zu seiner Ausgangsfläche steht, senkrecht zu seiner UV-Ebene.

9

26.01.2011, 11:22

aber man klappt bzw. projeziert das objekt doch stets auf eine Fläche, bzw man behandelt es wie eine
Gewinnen ist, wenn man einmal mehr aufsteht, als man zu Boden geht.

10

27.01.2011, 18:06

Dei Frage ist halt, wie projeziert man sinnvoll.
Wenn man einfahc das gesamte objekt auf einmal projeziert, hat man für unterschiedliche flächen unterschiedliche Auflösungen (Texel pro Modellkoordinateneinheit), was oft ncith gewünscht ist, von daher bin ich eher für das aufklappen.
Ich sage ja nciht, das es nciht geht, wie der TO verfährt, ich hinterfrage nur, ob er damit auch zu seinem gewünschten ergebnis kommt...

Werbeanzeige