Ich habe versucht, ein perlingeräusches wie Funktionsfunktion mit Videos wie dieses Video zu erhalten. HIGHMAP < /p>
double PerlinLikenoise(double PCMX,double PCMZ)
{
//Use only the fractional part of the float for this
//Use absolute value for negative position.
PCMX = std::abs(PCMX);
PCMZ = std::abs(PCMZ);
int CalculateMagnitudeXint = PCMX;
int CalculateMagnitudeZint = PCMZ;
//Then subtract the whole part of the value
double CalculateMagnitudeX = CalculateMagnitudeXint - PCMX;
double CalculateMagnitudeZ = CalculateMagnitudeZint - PCMZ;
XOneMagnitude = -CalculateMagnitudeX;
ZOneMagnitude = -CalculateMagnitudeZ;
XTwoMagnitude = 1 - CalculateMagnitudeX;
ZTwoMagnitude = -CalculateMagnitudeZ;
XThreeMagnitude = -CalculateMagnitudeX;
ZThreeMagnitude = 1 - CalculateMagnitudeZ;
XFourMagnitude = 1 - CalculateMagnitudeX;
ZFourMagnitude = 1 - CalculateMagnitudeZ;
dotproduct[1] = (XOneMagnitude * cos(XZHash(CalculateMagnitudeXint, CalculateMagnitudeZint, HashSeed) * ( PI / 180))) + (ZOneMagnitude * sin(XZHash(CalculateMagnitudeXint, CalculateMagnitudeZint, HashSeed) * ( PI / 180)));
dotproduct[2] = (XTwoMagnitude * cos(XZHash(CalculateMagnitudeXint + 1, CalculateMagnitudeZint, HashSeed) * ( PI / 180))) + (ZTwoMagnitude * sin(XZHash(CalculateMagnitudeXint + 1, CalculateMagnitudeZint, HashSeed) * ( PI / 180)));
dotproduct[3] = (XThreeMagnitude * cos(XZHash(CalculateMagnitudeXint, CalculateMagnitudeZint + 1, HashSeed) * ( PI / 180))) + (ZThreeMagnitude * sin(XZHash(CalculateMagnitudeXint, CalculateMagnitudeZint + 1, HashSeed) * ( PI / 180)));
dotproduct[4] = (XFourMagnitude * cos(XZHash(CalculateMagnitudeXint + 1, CalculateMagnitudeZint + 1, HashSeed) * ( PI / 180))) + (ZFourMagnitude * sin(XZHash(CalculateMagnitudeXint + 1, CalculateMagnitudeZint + 1, HashSeed) * ( PI / 180)));
//Combine 1 and 2
double CombinedOne = ((1-CalculateMagnitudeX) * dotproduct[2]) + (CalculateMagnitudeX * dotproduct[1]);
//Combine 2 and 3
double CombinedTwo = ((1-CalculateMagnitudeX) * dotproduct[4]) + (CalculateMagnitudeX * dotproduct[3]);
//Combine the 2 results
double Result = ((1-CalculateMagnitudeZ) * CombinedTwo) + (CalculateMagnitudeZ * CombinedOne);
return(-Result);
}
double GenerateHeightmapPos(double I,double J)
{
return(PerlinLikenoise(I,J) * .5 * 10);
}
< /code>
Sie können den Hash durch einen Winkel oder Ihre eigenen Zufallswinkelfunktionen mit einem zufälligen Satz ersetzen. < /p>
Die Funktion scheint nicht ordnungsgemäß zu funktionieren. Es gibt keinen guten Übergang von etwa einem halben Stück in der Nähe von 0,0. Die Funktionen sollen offensichtlich Werte zwischen ganzen Zahlen nehmen, um Gradienten wie Schwarz oder Weiße oder Höhe für Gelände zurückzugeben. Es erzeugt eine Geländehöhe unter Verwendung der X- und Y -Position als Eingabe. < /P>
Ich habe mit den Werten herumgespielt, die ich nicht herausfinden kann. Ich brauche einen Rauschgenerator für mein Projekt in Dev C ++.
Perlin -Rauschfunktion [geschlossen] ⇐ C++
-
- Similar Topics
- Replies
- Views
- Last post
Mobile version