aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Physics/OdePlugin/OdePlugin.cs42
1 files changed, 26 insertions, 16 deletions
diff --git a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
index dc7010e..572412a 100644
--- a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
+++ b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
@@ -1590,10 +1590,14 @@ namespace OpenSim.Region.Physics.OdePlugin
1590 x = x - offsetX; 1590 x = x - offsetX;
1591 y = y - offsetY; 1591 y = y - offsetY;
1592 1592
1593 index = (int)((int)y * (int)Constants.RegionSize + (int)x); 1593 index = (int)((int)x * ((int)Constants.RegionSize + 2) + (int)y);
1594 1594
1595 if (index < TerrainHeightFieldHeights[heightFieldGeom].Length) 1595 if (index < TerrainHeightFieldHeights[heightFieldGeom].Length)
1596 return (float)TerrainHeightFieldHeights[heightFieldGeom][(int)y * (int)Constants.RegionSize + (int)x]; 1596 {
1597 //m_log.DebugFormat("x{0} y{1} = {2}", x, y, (float)TerrainHeightFieldHeights[heightFieldGeom][index]);
1598 return (float)TerrainHeightFieldHeights[heightFieldGeom][index];
1599 }
1600
1597 else 1601 else
1598 return 0f; 1602 return 0f;
1599 } 1603 }
@@ -3366,7 +3370,7 @@ namespace OpenSim.Region.Physics.OdePlugin
3366 const float thickness = 0.2f; 3370 const float thickness = 0.2f;
3367 const int wrap = 0; 3371 const int wrap = 0;
3368 3372
3369 int regionsize = (int) Constants.RegionSize; 3373 int regionsize = (int) Constants.RegionSize + 2;
3370 //Double resolution 3374 //Double resolution
3371 //if (((int)Constants.RegionSize) == 256) 3375 //if (((int)Constants.RegionSize) == 256)
3372 // heightMap = ResizeTerrain512Interpolation(heightMap); 3376 // heightMap = ResizeTerrain512Interpolation(heightMap);
@@ -3377,19 +3381,25 @@ namespace OpenSim.Region.Physics.OdePlugin
3377 3381
3378 float hfmin = 2000; 3382 float hfmin = 2000;
3379 float hfmax = -2000; 3383 float hfmax = -2000;
3380 for (int x = 0; x < heightmapWidthSamples; x++) 3384
3381 { 3385 for (int x = 0; x < heightmapWidthSamples; x++)
3382 for (int y = 0; y < heightmapHeightSamples; y++)
3383 { 3386 {
3384 int xx = Util.Clip(x - 1, 0, regionsize - 1); 3387 for (int y = 0; y < heightmapHeightSamples; y++)
3385 int yy = Util.Clip(y - 1, 0, regionsize - 1); 3388 {
3386 3389 int xx = Util.Clip(x - 1, 0, regionsize - 1);
3387 float val = heightMap[yy * regionsize + xx]; 3390 int yy = Util.Clip(y - 1, 0, regionsize - 1);
3388 _heightmap[x * heightmapHeightSamples + y] = val; 3391
3389 hfmin = (val < hfmin) ? val : hfmin; 3392
3390 hfmax = (val > hfmax) ? val : hfmax; 3393 float val= heightMap[yy * (int)Constants.RegionSize + xx];
3394 _heightmap[x * ((int)Constants.RegionSize + 2) + y] = val;
3395
3396 hfmin = (val < hfmin) ? val : hfmin;
3397 hfmax = (val > hfmax) ? val : hfmax;
3398 }
3391 } 3399 }
3392 } 3400
3401
3402
3393 3403
3394 lock (OdeLock) 3404 lock (OdeLock)
3395 { 3405 {
@@ -3409,8 +3419,8 @@ namespace OpenSim.Region.Physics.OdePlugin
3409 3419
3410 } 3420 }
3411 IntPtr HeightmapData = d.GeomHeightfieldDataCreate(); 3421 IntPtr HeightmapData = d.GeomHeightfieldDataCreate();
3412 d.GeomHeightfieldDataBuildSingle(HeightmapData, _heightmap, 0, heightmapWidth, heightmapHeight, 3422 d.GeomHeightfieldDataBuildSingle(HeightmapData, _heightmap, 0, heightmapWidth + 1, heightmapHeight + 1,
3413 (int)heightmapWidthSamples, (int)heightmapHeightSamples, scale, 3423 (int)heightmapWidthSamples + 1, (int)heightmapHeightSamples + 1, scale,
3414 offset, thickness, wrap); 3424 offset, thickness, wrap);
3415 d.GeomHeightfieldDataSetBounds(HeightmapData, hfmin - 1, hfmax + 1); 3425 d.GeomHeightfieldDataSetBounds(HeightmapData, hfmin - 1, hfmax + 1);
3416 GroundGeom = d.CreateHeightfield(space, HeightmapData, 1); 3426 GroundGeom = d.CreateHeightfield(space, HeightmapData, 1);