2016-11-29 48 views
0

我正在進行程序性地形生成。此刻,我得到了由柏林噪音產生的地形。現在我想實施一個程序化的草代,但有一些限制。在頂部網格上產生物體

我只想生成草,如果是在世界中心半徑和地面上。我可以很容易地在世界中心的半徑內產卵。問題是我不知道如何知道指定座標的高度。

這是我試圖實現這一點,但不起作用,我不知道該怎麼做。我需要一些建議。

var group = new THREE.Group(); 

noise.seed(23); 
var worldWidth = 256, worldDepth = 256; 
var data = generateNoise(worldWidth, worldDepth); 
var geometry = new THREE.PlaneBufferGeometry(7500, 7500, worldWidth - 1, worldDepth - 1); 
geometry.rotateX(- Math.PI/2); 
geometry.computeBoundingBox(); 

var vertices = geometry.attributes.position.array; 

var positions = [] 

for (var i = 0, j = 0, l = vertices.length; i < l; i ++, j += 3) { 
    vertices [ j + 1 ] = data[ i ] * 10; 

    //check if this coordinate is inside the radius we want to know if can spawn a grass 
    // if is inside spawn a plant knowing the height of this position 

} 

var grass = new THREEx.createGrassTufts(positions) 
group.add(grass); 

var texture = assets.textures.grass.val; 

var material = new THREE.MeshPhongMaterial({ map: texture, shading: THREE.SmoothShading }); 

var ground = new THREE.Mesh(geometry, material); 
ground.receiveShadow = true; 
ground.castShadow = true; 

group.add(ground); 
+0

_but doesn沒有工作,我也不知道該怎麼做。尋求調試幫助的問題(「爲什麼這個代碼不工作?」)必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現問題所需的最短代碼。沒有明確問題陳述的問題*對其他讀者無益*。請參閱:如何創建[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 – Marcs

+0

地面的高度與佩林噪聲所分配的值不同嗎?如果您正在尋找平均高度或距離最低點的高度,則需要從噪聲集中獲取該信息,或者在頂點操縱過程中計算平均值/最低點,然後執行第二步通過計算真實身高。 – TheJim01

回答

0

Perlin雜針對單元陣列創建的:

  • 找回從COORDS cx= x/cell_size_x和從噪聲矩陣細胞cy = ...
  • GET高度值的單元:height = cell[cx][cy]

注:這是僞代碼