2016-11-29 71 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]

注:这是伪代码