【问题标题】:Spawn objects on top mesh在顶部网格上生成对象
【发布时间】: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


【解决方案1】:

为元胞数组创建 Perlin 噪声:

  • 从坐标cx= x / cell_size_xcy = ... 中找到单元格
  • 从噪声矩阵单元中获取高度值:height = cell[cx][cy]

注意:这是伪代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 2020-03-02
    • 1970-01-01
    相关资源
    最近更新 更多