private void UpdateProjectionValues() { if (grid.countY == 0) { return; } int count = grid.countY + 1; if (projection == null || projection.width != count) { CreateProjectionBuffer(count); } double min = GeoCalculator.LatitudeToNormalizedMercator(grid.south); double max = GeoCalculator.LatitudeToNormalizedMercator(grid.north); double invLatRange = (1.0 / (grid.north - grid.south)); float[] lats = new float[count]; double projLatInterval = (max - min) / (count - 1); for (int i = 0; i < count; i++) { double projLat = min + i * projLatInterval; double lat = (2 * Math.Atan(Math.Exp(projLat * Math.PI)) - HalfPI) * Rad2Deg; lats[i] = Mathf.Clamp01((float)(1 - (lat - grid.south) * invLatRange)); } byte[] latBytes = new byte[lats.Length * 4]; Buffer.BlockCopy(lats, 0, latBytes, 0, latBytes.Length); projection.LoadRawTextureData(latBytes); projection.Apply(); }
// // Private/Protected Methods // private void UpdateProjectionValues() { double min = GeoCalculator.LatitudeToNormalizedMercator(bounds.south); double max = GeoCalculator.LatitudeToNormalizedMercator(bounds.north); double invLatRange = 1.0 / (bounds.north - bounds.south); float[] lats = new float[ProjectionResolution]; double projLatInterval = (max - min) / (ProjectionResolution - 1); for (int i = 0; i < ProjectionResolution; i++) { double projLat = min + i * projLatInterval; double lat = (2 * Math.Atan(Math.Exp(projLat * Math.PI)) - HalfPI) * Rad2Deg; lats[i] = Mathf.Clamp01((float)(1 - (lat - bounds.south) * invLatRange)); } byte[] latBytes = new byte[lats.Length * 4]; Buffer.BlockCopy(lats, 0, latBytes, 0, latBytes.Length); projection.LoadRawTextureData(latBytes); projection.Apply(); }