【发布时间】:2016-11-29 20:08:47
【问题描述】:
我正在制作程序地形生成。目前我得到了一个由 Perlin 噪声生成的地形。现在我想实现一个程序化的草生成,但有一些限制。
我只想在世界中心半径范围内和地面上生成草。我可以轻松地在世界中心的半径范围内生成草。问题是我不知道如何知道该指定坐标的地面高度。
这是我尝试实现的,但没有成功,我也不知道该怎么做。我需要一些建议。
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);
【问题讨论】:
-
但不起作用,我不知道该怎么做。寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。 没有明确的问题陈述的问题对其他读者没有用处。请参阅:如何创建Minimal, Complete, and Verifiable example。
-
地面高度与您从 Perlin 噪声中分配的值不一样吗?如果您正在寻找平均高度或最低点的高度,您需要从噪声集中获取该信息,或者在顶点操作过程中计算您的平均/最低点,然后执行第二次通过计算真实高度。
标签: javascript three.js mesh procedural-generation