change warp3d terrain rendering, so it does cover all area
							parent
							
								
									09ae675d28
								
							
						
					
					
						commit
						a91ef313ef
					
				|  | @ -166,8 +166,8 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
|             } | ||||
| 
 | ||||
|             Vector3 camPos = new Vector3( | ||||
|                             m_scene.RegionInfo.RegionSizeX / 2 - 0.5f, | ||||
|                             m_scene.RegionInfo.RegionSizeY / 2 - 0.5f, | ||||
|                             (m_scene.RegionInfo.RegionSizeX - 1) * 0.5f, | ||||
|                             (m_scene.RegionInfo.RegionSizeY - 1) * 0.5f, | ||||
|                             221.7025033688163f); | ||||
|             // Viewport viewing down onto the region | ||||
|             Viewport viewport = new Viewport(camPos, -Vector3.UnitZ, 1024f, 0.1f, | ||||
|  | @ -284,7 +284,7 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
|         } | ||||
| 
 | ||||
|         // Add a terrain to the renderer. | ||||
|         // Note that we create a 'low resolution' 256x256 vertex terrain rather than trying for | ||||
|         // Note that we create a 'low resolution' 257x257 vertex terrain rather than trying for | ||||
|         //    full resolution. This saves a lot of memory especially for very large regions. | ||||
|         private void CreateTerrain(WarpRenderer renderer, bool textureTerrain) | ||||
|         { | ||||
|  | @ -296,49 +296,56 @@ namespace OpenSim.Region.CoreModules.World.Warp3DMap | |||
|             // 'diff' is the difference in scale between the real region size and the size of terrain we're buiding | ||||
|             float diff = regionsx / 256f; | ||||
| 
 | ||||
|             int npointsx =(int)(regionsx / diff); | ||||
|             int npointsy =(int)(regionsy / diff); | ||||
|             int npointsx = (int)(regionsx / diff) + 1; | ||||
|             int npointsy = (int)(regionsy / diff) + 1; | ||||
| 
 | ||||
|             float invsx = 1.0f / regionsx; | ||||
|             float invsy = 1.0f / (float)m_scene.RegionInfo.RegionSizeY; | ||||
|             float invsy = 1.0f / regionsy; | ||||
| 
 | ||||
|             // Create all the vertices for the terrain | ||||
|             warp_Object obj = new warp_Object(); | ||||
|             for (float y = 0; y < regionsy; y += diff) | ||||
|             warp_Vector pos; | ||||
|             float x, y; | ||||
|             for (y = 0; y < regionsy; y += diff) | ||||
|             { | ||||
|                 for (float x = 0; x < regionsx; x += diff) | ||||
|                 for (x = 0; x < regionsx; x += diff) | ||||
|                 { | ||||
|                     warp_Vector pos = ConvertVector(x , y , (float)terrain[(int)x, (int)y]); | ||||
|                     pos = ConvertVector(x , y , (float)terrain[(int)x, (int)y]); | ||||
|                     obj.addVertex(new warp_Vertex(pos, x *  invsx, 1.0f - y * invsy)); | ||||
|                 } | ||||
|                 pos = ConvertVector(x , y , (float)terrain[(int)(x - diff), (int)y]); | ||||
|                 obj.addVertex(new warp_Vertex(pos, 1.0f, 1.0f - y * invsy)); | ||||
|             } | ||||
| 
 | ||||
|             int lastY = (int)(y - diff); | ||||
|             for (x = 0; x < regionsx; x += diff) | ||||
|             { | ||||
|                 pos = ConvertVector(x , y , (float)terrain[(int)x, lastY]); | ||||
|                 obj.addVertex(new warp_Vertex(pos, x *  invsx, 1.0f - y * invsy)); | ||||
|             } | ||||
|             pos = ConvertVector(x , y , (float)terrain[(int)(x - diff), lastY]); | ||||
|             obj.addVertex(new warp_Vertex(pos, 1.0f, 1.0f)); | ||||
| 
 | ||||
|             // Now that we have all the vertices, make another pass and | ||||
|             // create the list of triangle indices. | ||||
|             float invdiff = 1.0f / diff; | ||||
|             int limx = npointsx - 1; | ||||
|             int limy = npointsy - 1; | ||||
|             for (float y = 0; y < regionsy; y += diff) | ||||
|             for (int j = 0; j < limy; j++) | ||||
|             { | ||||
|                 for (float x = 0; x < regionsx; x += diff) | ||||
|                 for (int i = 0; i < limx; i++) | ||||
|                 { | ||||
|                     float newX = x * invdiff; | ||||
|                     float newY = y * invdiff; | ||||
|                     if (newX < limx && newY < limy) | ||||
|                     { | ||||
|                         int v = (int)newY * npointsx + (int)newX; | ||||
|                     int v = j * npointsx + i; | ||||
| 
 | ||||
|                         // Make two triangles for each of the squares in the grid of vertices | ||||
|                         obj.addTriangle( | ||||
|                             v, | ||||
|                             v + 1, | ||||
|                             v + npointsx); | ||||
|                     // Make two triangles for each of the squares in the grid of vertices | ||||
|                     obj.addTriangle( | ||||
|                         v, | ||||
|                         v + 1, | ||||
|                         v + npointsx); | ||||
| 
 | ||||
|                         obj.addTriangle( | ||||
|                             v + npointsx + 1, | ||||
|                             v + npointsx, | ||||
|                             v + 1); | ||||
|                     } | ||||
|                     obj.addTriangle( | ||||
|                         v + npointsx + 1, | ||||
|                         v + npointsx, | ||||
|                         v + 1); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 UbitUmarov
						UbitUmarov