a few more changes to warp3d and export-map

httptests
UbitUmarov 2018-05-05 02:50:27 +01:00
parent a91ef313ef
commit 020f34f75b
2 changed files with 32 additions and 30 deletions

View File

@ -166,8 +166,8 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
} }
Vector3 camPos = new Vector3( Vector3 camPos = new Vector3(
(m_scene.RegionInfo.RegionSizeX - 1) * 0.5f, (m_scene.RegionInfo.RegionSizeX) * 0.5f,
(m_scene.RegionInfo.RegionSizeY - 1) * 0.5f, (m_scene.RegionInfo.RegionSizeY) * 0.5f,
221.7025033688163f); 221.7025033688163f);
// Viewport viewing down onto the region // Viewport viewing down onto the region
Viewport viewport = new Viewport(camPos, -Vector3.UnitZ, 1024f, 0.1f, Viewport viewport = new Viewport(camPos, -Vector3.UnitZ, 1024f, 0.1f,
@ -241,7 +241,7 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
m_colors.Clear(); m_colors.Clear();
GC.Collect(); GC.Collect();
m_log.Debug("[WARP 3D IMAGE MODULE]: GC.Collect()"); // m_log.Debug("[WARP 3D IMAGE MODULE]: GC.Collect()");
return bitmap; return bitmap;
} }
@ -271,10 +271,10 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
{ {
float waterHeight = (float)m_scene.RegionInfo.RegionSettings.WaterHeight; float waterHeight = (float)m_scene.RegionInfo.RegionSettings.WaterHeight;
renderer.AddPlane("Water", m_scene.RegionInfo.RegionSizeX * 0.5f); renderer.AddPlane("Water", m_scene.RegionInfo.RegionSizeX * 0.5f + 1.0f);
renderer.Scene.sceneobject("Water").setPos(m_scene.RegionInfo.RegionSizeX * 0.5f - 0.5f, renderer.Scene.sceneobject("Water").setPos(m_scene.RegionInfo.RegionSizeX * 0.5f,
waterHeight, waterHeight,
m_scene.RegionInfo.RegionSizeY * 0.5f - 0.5f); m_scene.RegionInfo.RegionSizeY * 0.5f);
warp_Material waterColorMaterial = new warp_Material(ConvertColor(WATER_COLOR)); warp_Material waterColorMaterial = new warp_Material(ConvertColor(WATER_COLOR));
waterColorMaterial.setReflectivity(0); // match water color with standard map module thanks lkalif waterColorMaterial.setReflectivity(0); // match water color with standard map module thanks lkalif
@ -299,8 +299,8 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
int npointsx = (int)(regionsx / diff) + 1; int npointsx = (int)(regionsx / diff) + 1;
int npointsy = (int)(regionsy / diff) + 1; int npointsy = (int)(regionsy / diff) + 1;
float invsx = 1.0f / regionsx; float invsx = 1.0f / (npointsx * diff);
float invsy = 1.0f / regionsy; float invsy = 1.0f / (npointsy * diff);
// Create all the vertices for the terrain // Create all the vertices for the terrain
warp_Object obj = new warp_Object(); warp_Object obj = new warp_Object();
@ -321,10 +321,10 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap
for (x = 0; x < regionsx; x += diff) for (x = 0; x < regionsx; x += diff)
{ {
pos = ConvertVector(x , y , (float)terrain[(int)x, lastY]); pos = ConvertVector(x , y , (float)terrain[(int)x, lastY]);
obj.addVertex(new warp_Vertex(pos, x * invsx, 1.0f - y * invsy)); obj.addVertex(new warp_Vertex(pos, x * invsx, 0f));
} }
pos = ConvertVector(x , y , (float)terrain[(int)(x - diff), lastY]); pos = ConvertVector(x , y , (float)terrain[(int)(x - diff), lastY]);
obj.addVertex(new warp_Vertex(pos, 1.0f, 1.0f)); obj.addVertex(new warp_Vertex(pos, 1.0f, 0f));
// Now that we have all the vertices, make another pass and // Now that we have all the vertices, make another pass and
// create the list of triangle indices. // create the list of triangle indices.

View File

@ -1399,12 +1399,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
m_log.InfoFormat( m_log.InfoFormat(
"[WORLD MAP]: Exporting world map for {0} to {1}", m_scene.RegionInfo.RegionName, exportPath); "[WORLD MAP]: Exporting world map for {0} to {1}", m_scene.RegionInfo.RegionName, exportPath);
const int TEXTURESIZE = 2048;
Bitmap mapTexture = new Bitmap(TEXTURESIZE, TEXTURESIZE);
Graphics g = Graphics.FromImage(mapTexture);
SolidBrush sea = new SolidBrush(Color.DarkBlue);
g.FillRectangle(sea, 0, 0, TEXTURESIZE, TEXTURESIZE);
// assumed this is 1m less than next grid line // assumed this is 1m less than next grid line
int regionsView = (int)m_scene.MaxRegionViewDistance; int regionsView = (int)m_scene.MaxRegionViewDistance;
@ -1420,6 +1414,20 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
int endX = regionX + regionSizeX + regionsView; int endX = regionX + regionSizeX + regionsView;
int endY = regionY + regionSizeY + regionsView; int endY = regionY + regionSizeY + regionsView;
int spanX = endX - startX + 2;
int spanY = endY - startY + 2;
Bitmap mapTexture = new Bitmap(spanX, spanY);
Graphics g = Graphics.FromImage(mapTexture);
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
SolidBrush sea = new SolidBrush(Color.DarkBlue);
g.FillRectangle(sea, 0, 0, spanX - 1, spanY - 1);
sea.Dispose();
List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID, List<GridRegion> regions = m_scene.GridService.GetRegionRange(m_scene.RegionInfo.ScopeID,
startX, startY, endX, endY); startX, startY, endX, endY);
@ -1434,11 +1442,6 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
startX--; startX--;
startY--; startY--;
int spanX = endX - startX + 1;
float scaleX = (float)TEXTURESIZE / (float)spanX;
int spanY = endY - startY + 1;
float scaleY = (float)TEXTURESIZE / (float)spanY;
foreach(GridRegion r in regions) foreach(GridRegion r in regions)
{ {
if(r.TerrainImage == UUID.Zero) if(r.TerrainImage == UUID.Zero)
@ -1450,15 +1453,15 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
if(OpenJPEG.DecodeToImage(texAsset.Data, out managedImage, out image)) if(OpenJPEG.DecodeToImage(texAsset.Data, out managedImage, out image))
{ {
int x = (int)((r.RegionLocX - startX) * scaleX); int x = r.RegionLocX - startX;
int y = (int)((r.RegionLocY - startY ) * scaleY); int y = r.RegionLocY - startY;
int sx = (int)(r.RegionSizeX * scaleX); int sx = r.RegionSizeX;
int sy = (int)(r.RegionSizeY * scaleY); int sy = r.RegionSizeY;
g.DrawImage(image, x, TEXTURESIZE - y - sy, sx, sy); // y origin is top g.DrawImage(image, x, spanY - y - sy, sx, sy); // y origin is top
if(r.RegionHandle == m_scene.RegionInfo.RegionHandle) if(r.RegionHandle == m_scene.RegionInfo.RegionHandle)
{ {
SizeF stringSize = g.MeasureString(r.RegionName, drawFont); SizeF stringSize = g.MeasureString(r.RegionName, drawFont);
g.DrawString(r.RegionName, drawFont, drawBrush, x + 30, TEXTURESIZE - y - 30 - stringSize.Height); g.DrawString(r.RegionName, drawFont, drawBrush, x + 30, spanY - y - 30 - stringSize.Height);
} }
} }
} }
@ -1473,11 +1476,10 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
drawFont.Dispose(); drawFont.Dispose();
} }
mapTexture.Save(exportPath, ImageFormat.Jpeg);
g.Dispose(); g.Dispose();
mapTexture.Save(exportPath, ImageFormat.Jpeg);
mapTexture.Dispose(); mapTexture.Dispose();
sea.Dispose();
m_log.InfoFormat( m_log.InfoFormat(
"[WORLD MAP]: Successfully exported world map for {0} to {1}", "[WORLD MAP]: Successfully exported world map for {0} to {1}",