因此,我正在制作一个可生成随机岛的地图生成器。它在生成器的心脏处使用Perlin噪声,然后在使用具有渐变的圆的方法来制作孤岛。circle方法在地图的中心创建了多个圆形,其渐变从颜色开始(从64到0)渐变。问题在于,此方法在具有圆形边缘的地图部分上创建了非自然外观。当为一个像素生成Perlin噪声时,它将在渐变图上获得该像素,然后使其与蓝色值互斥。因此,如果Perlin噪声在像素1、5上给出1,并且渐变图上的蓝色值为54,则将输出54的噪声值。如果在像素130、560上的Perlin噪声为0.5,且渐变颜色值为64那么噪声值为32。该代码有两个关键点,佩林位:noise = NoiseGenerator.Noise(x, y);double gradColour = getGradColour(x, y).B;double addedNoise = noise * gradColour;double gradNoise = addedNoise;// - gradColour;然后是渐变图生成器: public static void DrawGrad(float X, float Y, float R, Color C1, Color C2) { Graphics g = Graphics.FromImage(imgGrad); GraphicsPath path = new GraphicsPath(); path.AddEllipse(X, Y, R, R); PathGradientBrush pathGrBrush = new PathGradientBrush(path); pathGrBrush.CenterColor = C1; Color[] colours = { C2 }; pathGrBrush.SurroundColors = colours; g.FillEllipse(pathGrBrush, X, Y, R, R); //g.FillEllipse(Brushes.Red, X, Y, R, R); g.Flush(); } int amount = rnd.Next(25, 30); for (int i = 0; i < amount / 4; i++) { float X = rnd.Next(-800, 1748); float Y = rnd.Next(-800, 1748); float R = rnd.Next(1000, 1200); DrawGrad(X, Y, R, Color.FromArgb(255, 0, 0, rnd.Next(15, 20)), Color.FromArgb(0, 0, 0, 0)); } for (int i = 0; i < amount; i++) { double positionDiv = 1.98; double X1 = rnd.Next(0, 450) / positionDiv; double Y1 = rnd.Next(0, 450) / positionDiv; double R1 = rnd.Next(300, 650) / 4; float R = (float)R1; float X = (float)X1; float Y = (float)Y1; while (X + R > 1004) { X = 924 - R; } while (Y + R > 1004) { Y = 924 - R; } if(X < 30) { X = 30; }我只是想知道是否还有其他人知道C#中的其他方法可以使用perlin噪声创建孤岛?任何建议将不胜感激。
1 回答
- 1 回答
- 0 关注
- 381 浏览
添加回答
举报
0/150
提交
取消