HeightmapFromTexture помогите разобраться

456
08 марта 2017, 19:36

Добрый день, есть вот такой скрипт:

@MenuItem ("Terrain/Heightmap From Texture")
static function ApplyHeightmap () {
  var heightmap : Texture2D = Selection.activeObject as Texture2D;
  if (heightmap == null) { 
    EditorUtility.DisplayDialog("No texture selected", "Please select a texture.", "Cancel"); 
    return; 
  }
  Undo.RegisterUndo (Terrain.activeTerrain.terrainData, "Heightmap From Texture");
  var terrain = Terrain.activeTerrain.terrainData;
  var w = heightmap.width;
  var h = heightmap.height;
  var w2 = terrain.heightmapWidth;
  var heightmapData = terrain.GetHeights(0, 0, w2, w2);
  var mapColors = heightmap.GetPixels();
  var map = new Color[w2 * w2];
  if (w2 != w || h != w) {
    // Resize using nearest-neighbor scaling if texture has no filtering
    if (heightmap.filterMode == FilterMode.Point) {
      var dx : float = parseFloat(w)/w2;
      var dy : float = parseFloat(h)/w2;
      for (y = 0; y < w2; y++) {
        if (y%20 == 0) {
          EditorUtility.DisplayProgressBar("Resize", "Calculating texture", Mathf.InverseLerp(0.0, w2, y));
        }
        var thisY = parseInt(dy*y)*w;
        var yw = y*w2;
        for (x = 0; x < w2; x++) {
          map[yw + x] = mapColors[thisY + dx*x];
        }
      }
    }
    // Otherwise resize using bilinear filtering
    else {
      var ratioX = 1.0/(parseFloat(w2)/(w-1));
      var ratioY = 1.0/(parseFloat(w2)/(h-1));
      for (y = 0; y < w2; y++) {
        if (y%20 == 0) {
          EditorUtility.DisplayProgressBar("Resize", "Calculating texture", Mathf.InverseLerp(0.0, w2, y));
        }
        var yy = Mathf.Floor(y*ratioY);
        var y1 = yy*w;
        var y2 = (yy+1)*w;
        yw = y*w2;
        for (x = 0; x < w2; x++) {
          var xx = Mathf.Floor(x*ratioX);
          var bl = mapColors[y1 + xx];
          var br = mapColors[y1 + xx+1]; 
          var tl = mapColors[y2 + xx];
          var tr = mapColors[y2 + xx+1];
          var xLerp = x*ratioX-xx;
          map[yw + x] = Color.Lerp(Color.Lerp(bl, br, xLerp), Color.Lerp(tl, tr, xLerp), y*ratioY-yy);
        }
      }
    }
    EditorUtility.ClearProgressBar();
  }
  else {
    // Use original if no resize is needed
    map = mapColors;
  }
  // Assign texture data to heightmap
  for (y = 0; y < w2; y++) {
    for (x = 0; x < w2; x++) {
      heightmapData[y,x] = map[y*w2+x].grayscale;
    }
  }
  terrain.SetHeights(0, 0, heightmapData);
}

http://wiki.unity3d.com/index.php/HeightmapFromTexture

Этот скрипт преобразует из png, карту высот, например с этого сайта: terrain party

Все сделал как по гайду, но у меня не выходит запустить скрипт. При попытке запуска, пишет:

No texture selected

Заранее благодарен.

READ ALSO
ajax блокировка нативного javascript

ajax блокировка нативного javascript

ЗдравствуйтеТема очень заезженная, но я ответа так и не смог найти

268
почему выполняется обработчик

почему выполняется обработчик

Из базы выводится следующее

189
Pasport.js создаёт ещё одну сессию

Pasport.js создаёт ещё одну сессию

В общем такая проблемаДелаю авторизацию для node

372
Не открывается изображение для обрезки Jcrop

Не открывается изображение для обрезки Jcrop

Есть скрипт когда пытаюсь сделать превью то превю фото не открывается, но если готовое фото вставить то все работает по ссылке то есть так...

319