diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Grid.cs | 83 |
1 files changed, 80 insertions, 3 deletions
diff --git a/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Grid.cs b/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Grid.cs index a39db50..e6b18f4 100644 --- a/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Grid.cs +++ b/OpenSim/Region/Terrain.BasicTerrain/libTerrainBSD/Channel/Grid.cs | |||
@@ -43,13 +43,20 @@ namespace libTerrain | |||
43 | 43 | ||
44 | int x, y; | 44 | int x, y; |
45 | 45 | ||
46 | for (x = 0; x < w; x++) | 46 | if (max != min) |
47 | { | 47 | { |
48 | for (y = 0; y < h; y++) | 48 | for (x = 0; x < w; x++) |
49 | { | 49 | { |
50 | map[x, y] = (map[x, y] - min) * (1.0 / (max - min)); | 50 | for (y = 0; y < h; y++) |
51 | { | ||
52 | map[x, y] = (map[x, y] - min) * (1.0 / (max - min)); | ||
53 | } | ||
51 | } | 54 | } |
52 | } | 55 | } |
56 | else | ||
57 | { | ||
58 | this.Fill(0.5); | ||
59 | } | ||
53 | 60 | ||
54 | return this; | 61 | return this; |
55 | } | 62 | } |
@@ -244,6 +251,76 @@ namespace libTerrain | |||
244 | map = manipulated; | 251 | map = manipulated; |
245 | } | 252 | } |
246 | 253 | ||
254 | public void Distort(Channel mask, double str) | ||
255 | { | ||
256 | // Simple pertubation filter | ||
257 | double[,] manipulated = new double[w, h]; | ||
258 | |||
259 | double amount; | ||
260 | |||
261 | int x, y; | ||
262 | for (x = 0; x < w; x++) | ||
263 | { | ||
264 | for (y = 0; y < h; y++) | ||
265 | { | ||
266 | amount = mask.map[x, y]; | ||
267 | double offset_x = (double)x + (amount * str) - (0.5 * str); | ||
268 | double offset_y = (double)y + (amount * str) - (0.5 * str); | ||
269 | |||
270 | if (offset_x > w) | ||
271 | offset_x = w - 1; | ||
272 | if (offset_y > h) | ||
273 | offset_y = h - 1; | ||
274 | if (offset_y < 0) | ||
275 | offset_y = 0; | ||
276 | if (offset_x < 0) | ||
277 | offset_x = 0; | ||
278 | |||
279 | double p = GetBilinearInterpolate(offset_x, offset_y); | ||
280 | manipulated[x, y] = p; | ||
281 | SetDiff(x, y); | ||
282 | } | ||
283 | } | ||
284 | map = manipulated; | ||
285 | |||
286 | } | ||
287 | |||
288 | public void Distort(Channel mask, Channel mask2, double str) | ||
289 | { | ||
290 | // Simple pertubation filter | ||
291 | double[,] manipulated = new double[w, h]; | ||
292 | |||
293 | double amountX; | ||
294 | double amountY; | ||
295 | |||
296 | int x, y; | ||
297 | for (x = 0; x < w; x++) | ||
298 | { | ||
299 | for (y = 0; y < h; y++) | ||
300 | { | ||
301 | amountX = mask.map[x, y]; | ||
302 | amountY = mask2.map[x, y]; | ||
303 | double offset_x = (double)x + (amountX * str) - (0.5 * str); | ||
304 | double offset_y = (double)y + (amountY * str) - (0.5 * str); | ||
305 | |||
306 | if (offset_x > w) | ||
307 | offset_x = w - 1; | ||
308 | if (offset_y > h) | ||
309 | offset_y = h - 1; | ||
310 | if (offset_y < 0) | ||
311 | offset_y = 0; | ||
312 | if (offset_x < 0) | ||
313 | offset_x = 0; | ||
314 | |||
315 | double p = GetBilinearInterpolate(offset_x, offset_y); | ||
316 | manipulated[x, y] = p; | ||
317 | SetDiff(x, y); | ||
318 | } | ||
319 | } | ||
320 | map = manipulated; | ||
321 | |||
322 | } | ||
323 | |||
247 | public Channel Blend(Channel other, double amount) | 324 | public Channel Blend(Channel other, double amount) |
248 | { | 325 | { |
249 | int x, y; | 326 | int x, y; |