diff options
Diffstat (limited to 'OpenSim/Region/CoreModules/World/Warp3DMap')
-rw-r--r-- | OpenSim/Region/CoreModules/World/Warp3DMap/TerrainSplat.cs | 8 | ||||
-rw-r--r-- | OpenSim/Region/CoreModules/World/Warp3DMap/Warp3DImageModule.cs | 54 |
2 files changed, 39 insertions, 23 deletions
diff --git a/OpenSim/Region/CoreModules/World/Warp3DMap/TerrainSplat.cs b/OpenSim/Region/CoreModules/World/Warp3DMap/TerrainSplat.cs index 9534ad3..4719ba3 100644 --- a/OpenSim/Region/CoreModules/World/Warp3DMap/TerrainSplat.cs +++ b/OpenSim/Region/CoreModules/World/Warp3DMap/TerrainSplat.cs | |||
@@ -79,6 +79,7 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
79 | /// <remarks>Based on the algorithm described at http://opensimulator.org/wiki/Terrain_Splatting | 79 | /// <remarks>Based on the algorithm described at http://opensimulator.org/wiki/Terrain_Splatting |
80 | /// Note we create a 256x256 dimension texture even if the actual terrain is larger. | 80 | /// Note we create a 256x256 dimension texture even if the actual terrain is larger. |
81 | /// </remarks> | 81 | /// </remarks> |
82 | |||
82 | public static Bitmap Splat(ITerrainChannel terrain, | 83 | public static Bitmap Splat(ITerrainChannel terrain, |
83 | UUID[] textureIDs, float[] startHeights, float[] heightRanges, | 84 | UUID[] textureIDs, float[] startHeights, float[] heightRanges, |
84 | Vector3d regionPosition, IAssetService assetService, bool textureTerrain) | 85 | Vector3d regionPosition, IAssetService assetService, bool textureTerrain) |
@@ -129,8 +130,8 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
129 | asset = assetService.Get(textureIDs[i].ToString()); | 130 | asset = assetService.Get(textureIDs[i].ToString()); |
130 | if (asset != null) | 131 | if (asset != null) |
131 | { | 132 | { |
132 | // m_log.DebugFormat( | 133 | // m_log.DebugFormat( |
133 | // "[TERRAIN SPLAT]: Got cached original JPEG2000 terrain texture {0} {1}", i, asset.ID); | 134 | // "[TERRAIN SPLAT]: Got cached original JPEG2000 terrain texture {0} {1}", i, asset.ID); |
134 | 135 | ||
135 | try { detailTexture[i] = (Bitmap)CSJ2K.J2kImage.FromBytes(asset.Data); } | 136 | try { detailTexture[i] = (Bitmap)CSJ2K.J2kImage.FromBytes(asset.Data); } |
136 | catch (Exception ex) | 137 | catch (Exception ex) |
@@ -140,7 +141,7 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
140 | } | 141 | } |
141 | 142 | ||
142 | if (detailTexture[i] != null) | 143 | if (detailTexture[i] != null) |
143 | { | 144 | { |
144 | // Make sure this texture is the correct size, otherwise resize | 145 | // Make sure this texture is the correct size, otherwise resize |
145 | if (detailTexture[i].Width != 256 || detailTexture[i].Height != 256) | 146 | if (detailTexture[i].Width != 256 || detailTexture[i].Height != 256) |
146 | { | 147 | { |
@@ -352,7 +353,6 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
352 | b.Dispose(); | 353 | b.Dispose(); |
353 | return result; | 354 | return result; |
354 | } | 355 | } |
355 | |||
356 | public static Bitmap SplatSimple(float[] heightmap) | 356 | public static Bitmap SplatSimple(float[] heightmap) |
357 | { | 357 | { |
358 | const float BASE_HSV_H = 93f / 360f; | 358 | const float BASE_HSV_H = 93f / 360f; |
diff --git a/OpenSim/Region/CoreModules/World/Warp3DMap/Warp3DImageModule.cs b/OpenSim/Region/CoreModules/World/Warp3DMap/Warp3DImageModule.cs index 5f2534b..443eee1 100644 --- a/OpenSim/Region/CoreModules/World/Warp3DMap/Warp3DImageModule.cs +++ b/OpenSim/Region/CoreModules/World/Warp3DMap/Warp3DImageModule.cs | |||
@@ -80,6 +80,9 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
80 | 80 | ||
81 | private bool m_Enabled = false; | 81 | private bool m_Enabled = false; |
82 | 82 | ||
83 | private Bitmap lastImage = null; | ||
84 | private DateTime lastImageTime = DateTime.MinValue; | ||
85 | |||
83 | #region Region Module interface | 86 | #region Region Module interface |
84 | 87 | ||
85 | public void Initialise(IConfigSource source) | 88 | public void Initialise(IConfigSource source) |
@@ -118,14 +121,9 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
118 | 121 | ||
119 | List<string> renderers = RenderingLoader.ListRenderers(Util.ExecutingDirectory()); | 122 | List<string> renderers = RenderingLoader.ListRenderers(Util.ExecutingDirectory()); |
120 | if (renderers.Count > 0) | 123 | if (renderers.Count > 0) |
121 | { | 124 | m_log.Info("[MAPTILE]: Loaded prim mesher " + renderers[0]); |
122 | m_primMesher = RenderingLoader.LoadRenderer(renderers[0]); | ||
123 | m_log.DebugFormat("[WARP 3D IMAGE MODULE]: Loaded prim mesher {0}", m_primMesher); | ||
124 | } | ||
125 | else | 125 | else |
126 | { | 126 | m_log.Info("[MAPTILE]: No prim mesher loaded, prim rendering will be disabled"); |
127 | m_log.Debug("[WARP 3D IMAGE MODULE]: No prim mesher loaded, prim rendering will be disabled"); | ||
128 | } | ||
129 | 127 | ||
130 | m_scene.RegisterModuleInterface<IMapImageGenerator>(this); | 128 | m_scene.RegisterModuleInterface<IMapImageGenerator>(this); |
131 | } | 129 | } |
@@ -158,18 +156,36 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
158 | 156 | ||
159 | public Bitmap CreateMapTile() | 157 | public Bitmap CreateMapTile() |
160 | { | 158 | { |
161 | // Vector3 camPos = new Vector3(127.5f, 127.5f, 221.7025033688163f); | 159 | /* this must be on all map, not just its image |
162 | // Camera above the middle of the region | 160 | if ((DateTime.Now - lastImageTime).TotalSeconds < 3600) |
161 | { | ||
162 | return (Bitmap)lastImage.Clone(); | ||
163 | } | ||
164 | */ | ||
165 | |||
166 | List<string> renderers = RenderingLoader.ListRenderers(Util.ExecutingDirectory()); | ||
167 | if (renderers.Count > 0) | ||
168 | { | ||
169 | m_primMesher = RenderingLoader.LoadRenderer(renderers[0]); | ||
170 | } | ||
171 | |||
163 | Vector3 camPos = new Vector3( | 172 | Vector3 camPos = new Vector3( |
164 | m_scene.RegionInfo.RegionSizeX/2 - 0.5f, | 173 | m_scene.RegionInfo.RegionSizeX / 2 - 0.5f, |
165 | m_scene.RegionInfo.RegionSizeY/2 - 0.5f, | 174 | m_scene.RegionInfo.RegionSizeY / 2 - 0.5f, |
166 | 221.7025033688163f); | 175 | 221.7025033688163f); |
167 | // Viewport viewing down onto the region | 176 | // Viewport viewing down onto the region |
168 | Viewport viewport = new Viewport(camPos, -Vector3.UnitZ, 1024f, 0.1f, | 177 | Viewport viewport = new Viewport(camPos, -Vector3.UnitZ, 1024f, 0.1f, |
169 | (int)m_scene.RegionInfo.RegionSizeX, (int)m_scene.RegionInfo.RegionSizeY, | 178 | (int)m_scene.RegionInfo.RegionSizeX, (int)m_scene.RegionInfo.RegionSizeY, |
170 | (float)m_scene.RegionInfo.RegionSizeX, (float)m_scene.RegionInfo.RegionSizeY ); | 179 | (float)m_scene.RegionInfo.RegionSizeX, (float)m_scene.RegionInfo.RegionSizeY); |
171 | // Fill the viewport and return the image | 180 | |
172 | return CreateMapTile(viewport, false); | 181 | Bitmap tile = CreateMapTile(viewport, false); |
182 | m_primMesher = null; | ||
183 | return tile; | ||
184 | /* | ||
185 | lastImage = tile; | ||
186 | lastImageTime = DateTime.Now; | ||
187 | return (Bitmap)lastImage.Clone(); | ||
188 | */ | ||
173 | } | 189 | } |
174 | 190 | ||
175 | public Bitmap CreateViewImage(Vector3 camPos, Vector3 camDir, float fov, int width, int height, bool useTextures) | 191 | public Bitmap CreateViewImage(Vector3 camPos, Vector3 camDir, float fov, int width, int height, bool useTextures) |
@@ -285,9 +301,9 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
285 | float waterHeight = (float)m_scene.RegionInfo.RegionSettings.WaterHeight; | 301 | float waterHeight = (float)m_scene.RegionInfo.RegionSettings.WaterHeight; |
286 | 302 | ||
287 | renderer.AddPlane("Water", m_scene.RegionInfo.RegionSizeX * 0.5f); | 303 | renderer.AddPlane("Water", m_scene.RegionInfo.RegionSizeX * 0.5f); |
288 | renderer.Scene.sceneobject("Water").setPos(m_scene.RegionInfo.RegionSizeX/2 - 0.5f, | 304 | renderer.Scene.sceneobject("Water").setPos(m_scene.RegionInfo.RegionSizeX / 2 - 0.5f, |
289 | waterHeight, | 305 | waterHeight, |
290 | m_scene.RegionInfo.RegionSizeY/2 - 0.5f ); | 306 | m_scene.RegionInfo.RegionSizeY / 2 - 0.5f); |
291 | 307 | ||
292 | warp_Material waterColorMaterial = new warp_Material(ConvertColor(WATER_COLOR)); | 308 | warp_Material waterColorMaterial = new warp_Material(ConvertColor(WATER_COLOR)); |
293 | waterColorMaterial.setReflectivity(0); // match water color with standard map module thanks lkalif | 309 | waterColorMaterial.setReflectivity(0); // match water color with standard map module thanks lkalif |
@@ -316,7 +332,7 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
316 | warp_Vector pos = ConvertVector(x, y, (float)terrain[(int)x, (int)y]); | 332 | warp_Vector pos = ConvertVector(x, y, (float)terrain[(int)x, (int)y]); |
317 | obj.addVertex(new warp_Vertex(pos, | 333 | obj.addVertex(new warp_Vertex(pos, |
318 | x / (float)m_scene.RegionInfo.RegionSizeX, | 334 | x / (float)m_scene.RegionInfo.RegionSizeX, |
319 | (((float)m_scene.RegionInfo.RegionSizeY) - y) / m_scene.RegionInfo.RegionSizeY) ); | 335 | (((float)m_scene.RegionInfo.RegionSizeY) - y) / m_scene.RegionInfo.RegionSizeY)); |
320 | } | 336 | } |
321 | } | 337 | } |
322 | 338 | ||
@@ -384,7 +400,8 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
384 | warp_Texture texture; | 400 | warp_Texture texture; |
385 | using ( | 401 | using ( |
386 | Bitmap image | 402 | Bitmap image |
387 | = TerrainSplat.Splat(terrain, textureIDs, startHeights, heightRanges, | 403 | = TerrainSplat.Splat( |
404 | terrain, textureIDs, startHeights, heightRanges, | ||
388 | new Vector3d(globalX, globalY, 0.0), m_scene.AssetService, textureTerrain)) | 405 | new Vector3d(globalX, globalY, 0.0), m_scene.AssetService, textureTerrain)) |
389 | { | 406 | { |
390 | texture = new warp_Texture(image); | 407 | texture = new warp_Texture(image); |
@@ -660,7 +677,6 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
660 | #endregion Rendering Methods | 677 | #endregion Rendering Methods |
661 | 678 | ||
662 | #region Static Helpers | 679 | #region Static Helpers |
663 | |||
664 | // Note: axis change. | 680 | // Note: axis change. |
665 | private static warp_Vector ConvertVector(float x, float y, float z) | 681 | private static warp_Vector ConvertVector(float x, float y, float z) |
666 | { | 682 | { |