inspiriert vom Aktuelle-Fortschritte-Thread sammle ich mal lose all die Sachen, die mir zum Thema "Oberflächen prozedural generieren" einfallen. Als erstes das runde Unterteilen bzw. die Subdivision: ich habe einiges ausprobiert und wieder verworfen und bin am Ende bei dieser Methode gelandet:
p1, p2, p3 - Eckpunkte des Dreiecks
nf - Flächennormale
n1, n2, n3 - Normalen der Eckpunkte
p - der aktuell betrachtete Punkt auf dem Dreieck.
dp - Offset des Punktes, damit die resultierende Fläche "rund" ist
Die Formel, die ich jetzt einsetze, sieht so aus:
Code: Alles auswählen
float k1 = dot( n1, p - p1), k2 = ...;
vec3 n = normalize( n1 + s * (n2 - n1) + t * (n3 - n1));
float k = k1 + s * (k2 - k1) + t * (k3 - k1);
p += -0.701f * k * n;
oder als Image auf meinem Server
Das eine muss man anklicken, um es bewegt zu sehen, das andere ist bei den meisten Leuten unsichtbar, weil https-Seite auf http-Content verweist. Grmpf. Bei Gelegenheit kümmere ich mich mal darum.
Ich formel das jetzt mal durch und guck, ob es vielleicht nur ne Quadrierung oder so braucht oder ob sowas hässliches wie arctan() rauskommt