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
C#-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
public class PerlinNoise { public static Random Random; public double[,] Map128 { get; set; } public double[,] Map64 { get; set; } public double[,] Map32 { get; set; } public double[,] Map16 { get; set; } public void InitializeMaps() { Random = new Random(); // create Map128 Map128 = new double[128, 128]; for (int x = 0; x < 128; x++) { for (int y = 0; y < 128; y++) { Map128[x, y] = Random.NextDouble(); } } // create Map64 Map64 = new double[64, 64]; for (int x = 0; x < 64; x++) { for (int y = 0; y < 64; y++) { Map64[x, y] = Random.NextDouble(); } } // create Map32 Map32 = new double[32, 32]; for (int x = 0; x < 32; x++) { for (int y = 0; y < 32; y++) { Map32[x, y] = Random.NextDouble(); } } // create Map16 Map16 = new double[16, 16]; for (int x = 0; x < 16; x++) { for (int y = 0; y < 16; y++) { Map16[x, y] = Random.NextDouble(); } } } private byte DoubleToByte(double rate) { return (byte)(rate * 255); } public void GenerateNoise(Bitmap bmp) { for (int x = 0; x < 128; x++) { for (int y = 0; y < 128; y++) { int gray128 = DoubleToByte(Map128[x, y]); int x64 = (int)Math.Round((double)(x / 8)); int y64 = (int)Math.Round((double)(y / 8)); int gray64 = DoubleToByte(Map64[x64, y64]); int x32 = (int)Math.Round((double)(x / 16)); int y32 = (int)Math.Round((double)(y / 16)); int gray32 = DoubleToByte(Map32[x32, y32]); int x16 = (int)Math.Round((double)(x / 32)); int y16 = (int)Math.Round((double)(y / 32)); int gray16 = DoubleToByte(Map16[x16, y16]); int gray1 = (gray32 + gray16) / 2; int gray2 = (gray64 + gray1) / 2; int gray = (gray128 + gray2) / 2; bmp.SetPixel(x, y, Color.FromArgb((byte)gray, (byte)gray, (byte)gray)); } } } } |
C-/C++-Quelltext |
|
1 2 3 4 |
double pixel00 = Map64[x64_floor, y64_floor]; double pixel01 = Map64[x64_floor, y64_ceil]; double pixel10 = Map64[x64_ceil, y64_floor]; double pixel11 = Map64[x64_ceil, y64_ceil]; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 |
double weightX = x64 - x64_floor; //Wertebereich: [0, 1[ double weightY = y64 - y64_floor; //Wertebereich: [0, 1[ double pixelMixed = ((1.0 - weightX) * (1.0 - weightY)) * pixel00 + ((1.0 - weightX) * weightY ) * pixel01 + ( weightX * (1.0 - weightY)) * pixel10 + ( weightX * weightY ) * pixel11; |
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Spiele Programmierer« (19.03.2016, 20:38)
Alter Hase
Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy
Aber beim Smoothstep-Beispiel steht was von edge0 und edge1. Was ist das? Wo finde ich diese Dinge?
C#-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
public void GenerateNoise(BmpProcessor bmp) { for (int x = 0; x < 128; x++) { for (int y = 0; y < 128; y++) { int gray128 = DoubleToByte(Map128[x, y]); int x64 = (int)Math.Round((double)(x / 8)); int y64 = (int)Math.Round((double)(y / 8)); int gray64 = DoubleToByte(Map64[x64, y64]); double pixel00 = Map64[(int)Math.Floor((double)x64), (int)Math.Floor((double)y64)]; double pixel01 = Map64[(int)Math.Floor((double)x64), (int)Math.Ceiling((double)y64)]; double pixel10 = Map64[(int)Math.Ceiling((double)x64), (int)Math.Floor((double)y64)]; double pixel11 = Map64[(int)Math.Ceiling((double)x64), (int)Math.Ceiling((double)y64)]; double weightX = x64 - Math.Floor((double)x64); double weightY = y64 - Math.Floor((double)y64); double pixelMixed = ((1.0 - weightX) * (1.0 - weightY)) * pixel00 + ((1.0 - weightX) * weightY) * pixel01 + (weightX * (1.0 - weightY)) * pixel10 + (weightX * weightY) * pixel11; int gray = DoubleToByte(pixelMixed); bmp.SetPixel(x, y, Color.FromArgb((byte)gray, (byte)gray, (byte)gray)); } } } |
Werbeanzeige