aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorTeravus Ovares2008-08-16 19:03:29 +0000
committerTeravus Ovares2008-08-16 19:03:29 +0000
commitf191f38a3e4d45efd0ec1d7714b4331171cc8c6b (patch)
tree8c29f2cf6f4c3305eb9deef56a1673cf8c4d81a2
parentUpdate svn properties, minor formatting cleanup. (diff)
downloadopensim-SC_OLD-f191f38a3e4d45efd0ec1d7714b4331171cc8c6b.zip
opensim-SC_OLD-f191f38a3e4d45efd0ec1d7714b4331171cc8c6b.tar.gz
opensim-SC_OLD-f191f38a3e4d45efd0ec1d7714b4331171cc8c6b.tar.bz2
opensim-SC_OLD-f191f38a3e4d45efd0ec1d7714b4331171cc8c6b.tar.xz
* Fix a rare maptile shading error, terrain difference mod 1 = 0 + abs = oops.
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.cs49
1 files changed, 13 insertions, 36 deletions
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index ae7e3aa..2e89e4b 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -1085,8 +1085,10 @@ namespace OpenSim.Region.Environment.Scenes
1085 //float tmpval = (float)hm[x, y]; 1085 //float tmpval = (float)hm[x, y];
1086 float heightvalue = (float)hm[x, y]; 1086 float heightvalue = (float)hm[x, y];
1087 1087
1088
1088 if (heightvalue > (float)m_regInfo.RegionSettings.WaterHeight) 1089 if (heightvalue > (float)m_regInfo.RegionSettings.WaterHeight)
1089 { 1090 {
1091
1090 // scale height value 1092 // scale height value
1091 heightvalue = low + mid * (heightvalue - low) / mid; 1093 heightvalue = low + mid * (heightvalue - low) / mid;
1092 1094
@@ -1108,13 +1110,14 @@ namespace OpenSim.Region.Environment.Scenes
1108 //X 1110 //X
1109 // . 1111 // .
1110 // 1112 //
1111 1113 // Shade the terrain for shadows
1112 if ((x - 1 > 0) && (y - 1 > 0)) 1114 if ((x - 1 > 0) && (y - 1 > 0))
1113 { 1115 {
1114 hfvalue = (float)hm[x, y]; 1116 hfvalue = (float)hm[x, y];
1115 hfvaluecompare = (float)hm[x - 1, y - 1]; 1117 hfvaluecompare = (float)hm[x - 1, y - 1];
1116 hfdiff = hfvaluecompare - hfvalue; 1118 hfdiff = hfvaluecompare - hfvalue;
1117 1119
1120
1118 if (Single.IsInfinity(hfvalue) || Single.IsNaN(hfvalue)) 1121 if (Single.IsInfinity(hfvalue) || Single.IsNaN(hfvalue))
1119 hfvalue = 0; 1122 hfvalue = 0;
1120 1123
@@ -1127,7 +1130,14 @@ namespace OpenSim.Region.Environment.Scenes
1127 } 1130 }
1128 else if (hfdiff < -0.3f) 1131 else if (hfdiff < -0.3f)
1129 { 1132 {
1130 hfdiffi = Math.Abs((int)((hfdiff * 4) + (hfdiff * 0.5))) + Math.Abs((int)(((hfdiff % 1) * 0.5f) * 10f)); 1133 // We have to desaturate and blacken the land at the same time
1134 // we use floats, colors use bytes, so shrink are space down to
1135 // 0-255
1136 hfdiffi = Math.Abs((int)((hfdiff * 4) + (hfdiff * 0.5))) + 1;
1137 if (hfdiff % 1 != 0)
1138 {
1139 hfdiffi = hfdiffi + Math.Abs((int)(((hfdiff % 1) * 0.5f) * 10f) + 1);
1140 }
1131 //hfdiffi2 = (int)(hfdiff * 0.5f) + 1; 1141 //hfdiffi2 = (int)(hfdiff * 0.5f) + 1;
1132 if ((256 - y) - 1 > 0) 1142 if ((256 - y) - 1 > 0)
1133 { 1143 {
@@ -1146,40 +1156,7 @@ namespace OpenSim.Region.Environment.Scenes
1146 1156
1147 } 1157 }
1148 1158
1149 /* 1159
1150 //
1151 // .
1152 // X
1153 if ((x + 1 < 255) && (y + 1 < 255))
1154 {
1155 hfvalue = (float)hm[x, y];
1156 hfvaluecompare = (float)hm[x + 1, y + 1];
1157 hfdiff = hfvaluecompare - hfvalue;
1158
1159 if (hfdiff > 0.3f)
1160 {
1161
1162 }
1163 else if (hfdiff < -0.3f)
1164 {
1165 hfdiffi = Math.Abs((int)hfdiff) + 1;
1166 if ((256 - y) + 1 < 256)
1167 {
1168 Color Shade = mapbmp.GetPixel(x + 1, (256 - y) + 1);
1169
1170 int r = Shade.R;
1171 int g = Shade.G;
1172 int b = Shade.B;
1173 Shade = Color.FromArgb((r - hfdiffi > 0) ? r - hfdiffi : 0, (g - hfdiffi > 0) ? g - hfdiffi : 0, (b - hfdiffi > 0) ? g - hfdiffi : 0);
1174 mapbmp.SetPixel(x + 1, (256 - y) + 1, Shade);
1175 }
1176
1177 }
1178
1179
1180 }
1181 */
1182 //if ((x
1183 1160
1184 1161
1185 } 1162 }