Generische Höhle/Korridorsystem

Design Patterns, Erklärungen zu Algorithmen, Optimierung, Softwarearchitektur
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Antworten
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

Re: Generische Höhle/Korridorsystem

Beitrag von Spiele Programmierer »

Wieso geben diese Funktionene die du verlinkt hast _nur_ einen float-Wert zurück.
In einem gefüllten Bereich liefert die Funktion einen negativen Wert zurück, der eine Abschätzung der Entfernung zum nächsten leeren Bereich ist. In einem leeren Bereich liefert die Funktion einen positiven Wert zurück, der eine Abschätzung der Entfernung zum gefüllten Bereich ist.

Die Entfernungabschätzung erlaubt eben einige elegante Tricks. Zum Beispiel könnte man eben von der Abschätzung einfach 1 abziehen um das Objekt um 1 Längeneinheit zu extrudieren. Und wenn man ein Noise drauf addiert, extrudiert man eben zufällig um den Noise die Oberfläche. Oder man kann damit eben Mengenoperatoren zaubern. Das sogar mit weichen Übergängen.
dronus
Establishment
Beiträge: 114
Registriert: 11.01.2010, 01:53

Re: Generische Höhle/Korridorsystem

Beitrag von dronus »

Vielleicht wäre es schlau, die grobe Topologie vorher zu erzeugen (einen zufälligen 3d Graph mit Knotenpunkten und Verbindungen dazwischen) und dann beide Bausteine zu tesselieren.

Die Verbindungen kann man leicht als viereckige Röhren erzeugen, die dann iterativ unterteilt werden (so wie Subdivision Surfaces). Beim iterativen Unterteilen ist es immer recht leicht, Bedingungen zu formulieren, dass keine Entartungen entstehen (Überschneidungen etc.). So kann man runde, schroffe und gewundene Röhren erhalten. Die Knotenpunkte sind etwas schwieriger, aber die kann man durch einige gegebene Meshes für verschiedene Anzahl an "Anschlüssen" erzeugen, deren Anschlüsse einfach ein viereckiger Ring sind an die eine ununterteilte Verbindung passt.

Den Graph kann man direkt durch Zusammenflicken der Meshes in eine ganz grobe Höhle umwandeln, die man dann erst durch Subdivision schön macht. Wenn man enstsprechende Metadaten zu den Vertices der Verbindungen und Knotenpunkte anlegt, kann man die direkt verbinden ohne groß rechnen zu müssen.

Da die Gänge sehr kurz werden können, und die unverfeinerten Knotenpunkte bei geschickter Tesselierung eine gewisse Beweglichkeit der Anschlüss-Vertices ermöglichen, sind auch extreme Formen, wie z.B. eine Halle mit Säulen darin, möglich, ohne dass der Mesh entartet.
Antworten