public void Recreate(TerrainInfo info, float [,] altInMetres) { this.Info = info; CheckGridSize(altInMetres); Vector3 refr = new Vector3(info.CentreLatLong); Vector3 refe = EarthConverter.LatLongAltToECEF(refr); CreateVerticesFromFloats(altInMetres, refr, refe); Normals = NormalModel.CalculateNormals(this); }
private void CreateVerticesFromVectors(Vector3[,] lla, Vector3 refr, Vector3 refe) { for (int x = 0; x <= LatRows; x++) { for (int z = 0; z <= LongColumns; z++) { int ix = z * (LatRows + 1) + x; Vector3 e = EarthConverter.LatLongAltToECEF(lla[x, z]); Vector3 d = e - refe; Vector3 loc = EarthConverter.RotateECEF(d, refr.X, refr.Y); Vertices[ix] = loc; } } }
private void CreateVerticesFromFloats(float[,] altInMetres, Vector3 refr, Vector3 refe) { float xo = (float)Info.DegreesLatitudePerPixel; float zo = (float)Info.DegreesLongitudePerPixel; for (float x = 0; x <= LatRows; x++) { for (float z = 0; z <= LongColumns; z++) { int ix = (int)(z * (LatRows + 1) + x); Vector3 lla = new Vector3(Info.SouthWestLatLong.X + x * xo, Info.SouthWestLatLong.Y + z * zo, altInMetres[(int)x, (int)z]); Vector3 e = EarthConverter.LatLongAltToECEF(lla); Vector3 d = e - refe; Vector3 loc = EarthConverter.RotateECEF(d, refr.X, refr.Y); Vertices[ix] = loc; } } }
public void Recreate(Vector3[,] lla, Vector2 CentrePoint) { double dxSum = 0; double dzSum = 0; for (int i = 1; i < lla.GetLength(0); i++) { dxSum = dxSum + lla[i, 0].X - lla[i - 1, 0].X; } for (int i = 1; i < lla.GetLength(1); i++) { dzSum = dzSum + lla[0, i].Y - lla[0, i - 1].Y; } double dLat = dxSum / (lla.GetLength(0) - 1); double dLong = dzSum / (lla.GetLength(1) - 1); this.Info = new TerrainInfo() { DegreesLatitudePerPixel = dLat, DegreesLongitudePerPixel = dLong, SouthWestLatLong = lla[0, 0].Xy, NorthEastLatLong = lla[lla.GetLength(0) - 1, lla.GetLength(1) - 1].Xy + new Vector2((float)dLat, (float)dLong) }; CheckGridSize(lla); Vector3 refr = new Vector3(CentrePoint); if (CentrePoint.X < -90) { refr = new Vector3(Info.CentreLatLong); } Vector3 refe = EarthConverter.LatLongAltToECEF(refr); CreateVerticesFromVectors(lla, refr, refe); Normals = NormalModel.CalculateNormals(this); }