diff options
Diffstat (limited to '')
3 files changed, 87 insertions, 4 deletions
diff --git a/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Editing/Flatten.cs b/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Editing/Flatten.cs index 57ba729..03b88a4 100644 --- a/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Editing/Flatten.cs +++ b/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Editing/Flatten.cs | |||
@@ -44,6 +44,11 @@ namespace libTerrain | |||
44 | /// <param name="amount">The scale of the terrain mask</param> | 44 | /// <param name="amount">The scale of the terrain mask</param> |
45 | public void Flatten(double rx, double ry, double size, double amount) | 45 | public void Flatten(double rx, double ry, double size, double amount) |
46 | { | 46 | { |
47 | FlattenFast(rx, ry, size, amount); | ||
48 | } | ||
49 | |||
50 | private void FlattenSlow(double rx, double ry, double size, double amount) | ||
51 | { | ||
47 | // Generate the mask | 52 | // Generate the mask |
48 | Channel temp = new Channel(w, h); | 53 | Channel temp = new Channel(w, h); |
49 | temp.Fill(0); | 54 | temp.Fill(0); |
@@ -70,6 +75,51 @@ namespace libTerrain | |||
70 | 75 | ||
71 | } | 76 | } |
72 | 77 | ||
78 | private void FlattenFast(double rx, double ry, double size, double amount) | ||
79 | { | ||
80 | int x, y; | ||
81 | double avg = 0; | ||
82 | double div = 0; | ||
83 | |||
84 | int minX = Math.Max(0, (int)(rx - (size + 1))); | ||
85 | int maxX = Math.Min(w, (int)(rx + (size + 1))); | ||
86 | int minY = Math.Max(0, (int)(ry - (size + 1))); | ||
87 | int maxY = Math.Min(h, (int)(ry + (size + 1))); | ||
88 | |||
89 | for (x = minX; x < maxX; x++) | ||
90 | { | ||
91 | for (y = minY; y < maxY; y++) | ||
92 | { | ||
93 | double z = size; | ||
94 | z *= z; | ||
95 | z -= ((x - rx) * (x - rx)) + ((y - ry) * (y - ry)); | ||
96 | |||
97 | if (z < 0) | ||
98 | z = 0; | ||
99 | |||
100 | avg += z * amount; | ||
101 | div += z; | ||
102 | } | ||
103 | } | ||
104 | |||
105 | double height = avg / div; | ||
106 | |||
107 | for (x = minX; x < maxX; x++) | ||
108 | { | ||
109 | for (y = minY; y < maxY; y++) | ||
110 | { | ||
111 | double z = size; | ||
112 | z *= z; | ||
113 | z -= ((x - rx) * (x - rx)) + ((y - ry) * (y - ry)); | ||
114 | |||
115 | if (z < 0) | ||
116 | z = 0; | ||
117 | |||
118 | map[x, y] = Tools.linearInterpolate(map[x, y], height, z); | ||
119 | } | ||
120 | } | ||
121 | } | ||
122 | |||
73 | public void Flatten(Channel mask, double amount) | 123 | public void Flatten(Channel mask, double amount) |
74 | { | 124 | { |
75 | // Generate the mask | 125 | // Generate the mask |
diff --git a/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Generators/Fracture.cs b/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Generators/Fracture.cs index b585caa..8427eab 100644 --- a/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Generators/Fracture.cs +++ b/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Generators/Fracture.cs | |||
@@ -79,6 +79,7 @@ namespace libTerrain | |||
79 | 79 | ||
80 | throw new Exception("Out of bounds parameter (val)"); | 80 | throw new Exception("Out of bounds parameter (val)"); |
81 | } | 81 | } |
82 | |||
82 | public void Fracture(int number, double scalemin, double scalemax) | 83 | public void Fracture(int number, double scalemin, double scalemax) |
83 | { | 84 | { |
84 | Random rand = new Random(seed); | 85 | Random rand = new Random(seed); |
@@ -90,6 +91,8 @@ namespace libTerrain | |||
90 | a = RadialEdge256(rand.Next(1023)); // TODO: Broken | 91 | a = RadialEdge256(rand.Next(1023)); // TODO: Broken |
91 | b = RadialEdge256(rand.Next(1023)); // TODO: Broken | 92 | b = RadialEdge256(rand.Next(1023)); // TODO: Broken |
92 | double z = rand.NextDouble(); | 93 | double z = rand.NextDouble(); |
94 | double u = rand.NextDouble(); | ||
95 | double v = rand.NextDouble(); | ||
93 | 96 | ||
94 | for (int x = 0; x < w; x++) | 97 | for (int x = 0; x < w; x++) |
95 | { | 98 | { |
@@ -97,9 +100,39 @@ namespace libTerrain | |||
97 | { | 100 | { |
98 | double miny = Tools.linearInterpolate(a[1], b[1], (double)x / (double)w); | 101 | double miny = Tools.linearInterpolate(a[1], b[1], (double)x / (double)w); |
99 | 102 | ||
100 | if (y > miny) | 103 | if (v >= 0.5) |
104 | { | ||
105 | if (u >= 0.5) | ||
106 | { | ||
107 | if (y > miny) | ||
108 | { | ||
109 | map[x, y] += Tools.linearInterpolate(scalemin, scalemax, z); | ||
110 | } | ||
111 | } | ||
112 | else | ||
113 | { | ||
114 | if (y < miny) | ||
115 | { | ||
116 | map[x, y] += Tools.linearInterpolate(scalemin, scalemax, z); | ||
117 | } | ||
118 | } | ||
119 | } | ||
120 | else | ||
101 | { | 121 | { |
102 | map[x, y] += Tools.linearInterpolate(scalemin, scalemax, z); | 122 | if (u >= 0.5) |
123 | { | ||
124 | if (x > miny) | ||
125 | { | ||
126 | map[x, y] += Tools.linearInterpolate(scalemin, scalemax, z); | ||
127 | } | ||
128 | } | ||
129 | else | ||
130 | { | ||
131 | if (x < miny) | ||
132 | { | ||
133 | map[x, y] += Tools.linearInterpolate(scalemin, scalemax, z); | ||
134 | } | ||
135 | } | ||
103 | } | 136 | } |
104 | } | 137 | } |
105 | } | 138 | } |
diff --git a/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Manipulators/NavierStokes.cs b/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Manipulators/NavierStokes.cs index 24ff37c..a035098 100644 --- a/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Manipulators/NavierStokes.cs +++ b/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Manipulators/NavierStokes.cs | |||
@@ -225,9 +225,9 @@ namespace libTerrain | |||
225 | int i; | 225 | int i; |
226 | int j; | 226 | int j; |
227 | 227 | ||
228 | for (i = 0; i <= N; i++) | 228 | for (i = 1; i <= N; i++) |
229 | { | 229 | { |
230 | for (j = 0; j <= N; j++) | 230 | for (j = 1; j <= N; j++) |
231 | { | 231 | { |
232 | dens[nsIX(i, j, N)] = doubles[i, j]; | 232 | dens[nsIX(i, j, N)] = doubles[i, j]; |
233 | } | 233 | } |