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

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

21

28.11.2012, 22:34

Verdammt dot hat recht^^
Wie aufwändig wäre es wohl die Zylinderprojektion für eine Textur nachzubilden.

22

28.11.2012, 23:45

Da dieses Problem ja schon andere vor mir hatten (Spiele sind voll mit Kugeln aus allen möglichen Materialien)
dachte ich mir muss es Tools geben die aus einer normalen Textur eine ENTSPRECHENDE Textur für Kugeloberflächen baut.
Ziel dabei ist eine Holzkugel darzustellen die auch an den Polen (näherungsweise) wie eine echte Holzkugel aussieht.

Du hast also eine kachelbare Holztextur und möchtest die ohne sichtbare Übergänge auf eine Kugel mappen?
Ich bezweifle, dass das möglich ist. Die kachelbarkeit wird sich einfach nicht auf die Kugeloberfläche übertragen. Natürlich kann man eine Kugel ohne sichtbare Übergänge texturieren, aber die Textur ist dann nicht vernünftig für z.b. einen Würfel benutzbar.
Die einfachste Möglichkeit ist wohl ein UV-Layout zu erstellen und dann in Blender eine prozedurale Textur in dein Layout zu baken. Dann hast du deine verzerrungsfreie Texturierung, wenn das UV-Layout vernünftig war. Aber das ist dann eine Holztextur speziell für Kugeln.
Lieber dumm fragen, als dumm bleiben!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

23

28.11.2012, 23:46

Verdammt dot hat recht^^
Wie aufwändig wäre es wohl die Zylinderprojektion für eine Textur nachzubilden.

Das Problem ist nicht irgendein Aufwand, sondern dass es hier einfach rein prinzipiell keine Antwort gibt, da die Frage keinen Sinn macht. Überlegen wir mal: Unsere Kugel ist eine zweidimensionale Fläche in einem dreidimensionalen Raum, eine Menge aus Punkten. Jedem Punkt der Kugel soll nun ein Farbwert zugeordnet werden. Eine mögliche Darstellung einer solchen Zuordnung ist nun eben, jedem Punkt der Kugel einen Punkt in einer zweidimensionalen Textur zuzuordnen und dort den entsprechenden Farbwert zu speichern. Von der in so einem Mapping zwangsweise vorhandenen Singularität mal abgesehen, hat jeder Punkt auf der Kugel einen entsprechenden Punkt in der Textur und umgekehrt. Wesentliche Erkenntnis: Die Textur und das Mapping zwischen Kugel und Textur sind nicht voneinander unabhängig! Entweder du hast die Textur, kennst das zugehörige Mapping auf die Kugel und kannst damit jedem Punkt der Kugel seinen Farbwert zuordnen, oder du hast die Information welche Punkte welche Farben haben sollen und kannst dir die dem unter einem gegebenen Mapping entsprechende Textur berechnen. Nur eine Textur allein hilft vielleicht einem Baron Münchhausen, der es auch fertig bringt, sich an den eigenen Haaren aus dem Sumpf zu ziehen, rein mathematisch ist das Problem, eine gegebene Textur so zu verändern, dass beim Mappen auf eine Kugel keine Verzerrungen auftreten, allerdings unterbestimmt. Das fängt schon da an, dass es überhaupt erst Sinn macht, von "Verzerrungen" zu sprechen, wenn man auch weiß, was genau man unter "Unverzerrt" verstehen würde...

Ziel dabei ist eine Holzkugel darzustellen [...]

Na also, so kommen wir schon weiter. Wie genau soll das Holzmuster denn erzeugt werden? Prozedural? Gemalt? Fotographiert? ...?

So eine Holzmaserung ist rein prinzipiell mal eine voluminöse, dreidimensionale Struktur. Prozedural lässt sich so eine Maserung gut als Skalarfeld auf Basis von mehreren Oktaven Perlin Noise erzeugen. Diese Funktion würde dann auch jedem Punkt deiner Kugel einen Farbwert zuordnen und auf Basis dessen könnte man dann z.B. die entsprechende Textur unter einer Zylinderprojektion berechnen...

Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von »dot« (29.11.2012, 00:10)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

24

29.11.2012, 06:39

Einfacher kann man auch eine Holz-Textur nehmen und dann jedem Punkt der Kugel eine UV-Koordinate geben, die seiner XY-Koordinate entspricht und dabei die Z-Koordinate komplett ignorieren.
Quasi so:
http://www.rhysperkins.com/XNA/SphereCylinderMapping.png
Macht man dann noch eine leichte Verschiebung der Offsets in XY in Abhängigkeit von Z (mehrere Sinus-Wellen oder Noise), dann kommt da ein brauchbares Ergebnis raus. Dafür braucht man gar kein voluminöses Feld, auch wenn das das korrektere wäre. Für einen Würfel geht das übrigens auch und auch da wirkt es nicht so schlecht.

Edit:
Mal kurz mit meinem eigenen Mesh/Texture-Tool rumgespielt und das sah dann so aus mit einer Textur, die nur simple Kreise enthielt (Bild ganz rechts). Da sieht man auch ganz gut, dass die Pole keine Verzerrung aufweisen.
Genau das ist Holz genau genommen: Eine Kreis-Textur entlang dem Stamm extrudiert. Daraus eine Kugel zu schnitzen ändert an der Textur ja nichts, sie muss nur richtig gemappt werden.
»BlueCobold« hat folgendes Bild angehängt:
  • Unbenannt.png
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »BlueCobold« (29.11.2012, 07:06)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

25

29.11.2012, 07:27

Gute Idee :)

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

26

29.11.2012, 12:58

Ansonsten kannst du auch eine Kachelbare Textur nehmen und diese in einem 3D Programm (zum Beispiel Blender) auf die Kugel legen. Dort hast du normal mehrere Mappingmethoden und je nach Textur musst du einfach ein bisschen rumspielen bis es im Prinzip gut aussieht. Mit ein wenig Erfahrung geht das super fix. Normal kannst du die Textur bemalen, indem du auf dem Mesh malst. Texturepaint heißt das ganze soweit ich das in Erinnerung habe. So kannst du dann die Schnittstellen auflösen. Du musst natürlich gucken, dass deine Textur groß genug ist. Wenn sie sich mehrfach auf dem Modell wiederholt funktioniert das ganze nicht. Im Prinzip übermalst, verwischst und klonst du an den Schnittstellen, bis dir das Ergebnis gefällt.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

stef

Treue Seele

  • »stef« ist der Autor dieses Themas

Beiträge: 246

Wohnort: Kassel

Beruf: Softwareentwickler

  • Private Nachricht senden

27

29.11.2012, 21:44

Hallo Leute

Auch auf die Gefahr hin das Ihr mich Köpft. Das mit der Holzkugel war nur ein Beispiel und nicht das Problem an dem ich momentan arbeite. (Deshalb fing der Satz auch mit „Stellt euch vor …“ an). Was ich konkret umsetzen will ist eine Sonne. Um die Korona dabei möglichst echt wirken zu lassen habe ich auf eine Idee aus Davids Buch zurück gegriffen. Aktiviere Alphablending, zeichne verschieden große Kugeln (Reihenfolge klein nach groß) die sich zufällig gegeneinander drehen und versehe die Kugeln mit einem zufälligem Muster das irgend wie Feuer ähnlich ist.
Das umzusetzen ist nicht schwer. Auch die Feuertextur war schnell gemacht. Was mich nur tierisch gestört hat war das man auf den äußeren Kugeln immer wieder den zerknautschten Pol gesehen hat wenn dieser mal zufällig vorbei kam.
Es ging mir also darum ein eher zufälliges Muster gleichmäßig auf einer Kugeloberfläche zu verteilen ohne diesen Knautscheffekt an den Polen zu bekommen. Da mir das mit der Sonne etwas zu komplex zum erklären war habe ich als Beispiel für zufällige Muster auf Texturen zuerst an Holz gedacht. Auf Cobolds Idee das man Holzmaserungen mit in sich verdrehten Texturen erreichen kann wäre ich im Leben nicht gekommen.
Für mein Feuerproblem habe ich aber eine Lösung gefunden. Ich habe meine Feuertextur mit einem 4WayFlip seamless gerechnet und eine CubeMap daraus gebaut. CubeMaps kann man verzerrungsfrei auf eine Kugel legen. Das Ergebnis kann sich sehen lassen. (siehe Anhang)

Ich hoffe Ihr seit nicht sauer das ich euch versehentlich in die falsche Richtung gejagt habe. Bin mir auch sicher das der ein oder andere durch Cobolds Idee inspiriert worden ist.
An alle die mit diskutiert haben vielen Dank.
»stef« hat folgende Bilder angehängt:
  • Sonne.jpg
  • sun_x-.jpg
"In C++ it's harder to shoot yourself in the foot, but when you do, you blow off your whole leg." — Bjarne Stroustrup.

stef

Treue Seele

  • »stef« ist der Autor dieses Themas

Beiträge: 246

Wohnort: Kassel

Beruf: Softwareentwickler

  • Private Nachricht senden

28

29.11.2012, 22:02

Das Problem ist nicht irgendein Aufwand, sondern dass es hier einfach rein prinzipiell keine Antwort gibt, da die Frage keinen Sinn macht. Überlegen wir mal: Unsere Kugel ist eine zweidimensionale Fläche in einem dreidimensionalen Raum, eine Menge aus Punkten. Jedem Punkt der Kugel soll nun ein Farbwert zugeordnet werden. Eine mögliche Darstellung einer solchen Zuordnung ist nun eben, jedem Punkt der Kugel einen Punkt in einer zweidimensionalen Textur zuzuordnen und dort den entsprechenden Farbwert zu speichern. Von der in so einem Mapping zwangsweise vorhandenen Singularität mal abgesehen, hat jeder Punkt auf der Kugel einen entsprechenden Punkt in der Textur und umgekehrt. Wesentliche Erkenntnis: Die Textur und das Mapping zwischen Kugel und Textur sind nicht voneinander unabhängig! Entweder du hast die Textur, kennst das zugehörige Mapping auf die Kugel und kannst damit jedem Punkt der Kugel seinen Farbwert zuordnen, oder du hast die Information welche Punkte welche Farben haben sollen und kannst dir die dem unter einem gegebenen Mapping entsprechende Textur berechnen. Nur eine Textur allein hilft vielleicht einem Baron Münchhausen, der es auch fertig bringt, sich an den eigenen Haaren aus dem Sumpf zu ziehen, rein mathematisch ist das Problem, eine gegebene Textur so zu verändern, dass beim Mappen auf eine Kugel keine Verzerrungen auftreten, allerdings unterbestimmt. Das fängt schon da an, dass es überhaupt erst Sinn macht, von "Verzerrungen" zu sprechen, wenn man auch weiß, was genau man unter "Unverzerrt" verstehen würde...


Bin mir nicht sicher ob ich das alles verstanden habe (Singularitäten kenne ich nur von StarTrek) aber wenn es möglich ist die Oberfläche einer Kugel auf eine Quadratische Fläche zu bringen (Karten) sollte das doch auch anderst herum möglich sein, oder ?
"In C++ it's harder to shoot yourself in the foot, but when you do, you blow off your whole leg." — Bjarne Stroustrup.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

29

29.11.2012, 22:03

Die Idee mit 4-seitigem seamless hatte ich auch, habe allerdings nicht geglaubt, dass das hinterher brauchbar aussieht. Aber wie Du siehst, sollte man jedes Problem immer so konkret wie möglich beschreiben, da es eben meist eine sehr spezielle Lösung gibt, die nur auf eben dieses spezielle Problem passt ;)

Und ... nicht jede Abbildung ist umkehrbar. Das gilt nicht nur für Funktionen, sondern auch für graphische Abbildungen. Eine Kugel kann man auf einem Rechteck darstellen, indem man gewisse Werte mehrfach darstellt (die Pole sind ein einziger Punkt, welcher zu einer ganzen Kante gestreckt wird). Dabei wird quasi mehr Information generiert. Im Gegenzug müsste man aus einer Rechteck-Textur aber jede Menge Information entfernen (eben an den Polen), damit so ein Mapping möglich wird. Es ist daher... nicht möglich jede beliebige Textur ohne Informationsverlust auf eine Kugel zu mappen. Sowohl "meine" Variante, als auch Deine zeigen das sehr deutlich.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

30

30.11.2012, 00:11

Falls es noch wen interessiert, wie man Texturen für sphärische Projektion vorbereitet:
http://www.maxoncomputer.com/tutorial_de…p?tutorialID=54 sieht ganz brauchbar aus, müsste so auch mit gimp gehen.
Evt. kann man mit Hugin (http://hugin.sourceforge.net) oder so das ganze noch schneller hinbekommen.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Chromanoid« (30.11.2012, 00:20)


Werbeanzeige