Javascript 通过修改几何体顶点创建的低多边形地形正在产生黑色小故障

Javascript 通过修改几何体顶点创建的低多边形地形正在产生黑色小故障,javascript,three.js,Javascript,Three.js,我正在尝试为我的项目创建随机低多边形样式的地形。我决定最好的方式是: 创建一个BoxGeometry对象作为我的地板,并将widthSegments和heightSegments设置为大于默认值(100) 使用.vertices数组访问每个顶点 使用geomFloor.vertexts上的forEach循环迭代每个顶点 每次迭代,在到点之间生成一个随机数(顶点的最大和最小y位置) 将当前顶点的.y设置为随机数 更新顶点 这是我的流程代码: function createFloorSecondSc

我正在尝试为我的项目创建随机低多边形样式的地形。我决定最好的方式是:

  • 创建一个
    BoxGeometry
    对象作为我的地板,并将
    widthSegments
    heightSegments
    设置为大于默认值(100)
  • 使用
    .vertices
    数组访问每个顶点
  • 使用
    geomFloor.vertexts上的
    forEach
    循环迭代每个顶点
  • 每次迭代,在到点之间生成一个随机数(顶点的最大和最小y位置)
  • 将当前顶点的
    .y
    设置为随机数
  • 更新顶点
  • 这是我的流程代码:

    function createFloorSecondScene(){ 
        var geomFloor = new THREE.BoxGeometry(20000, 1, 20000, 100, 1, 100); 
    
        geomFloor.mergeVertices();
    
        var randomFloorVertexPos;
    
        geomFloor.vertices.forEach(function(floorVertex){
            randomFloorVertexPos = Math.floor(Math.random() * ((0) - 
            (-90)) + (-90));
    
            floorVertex.y = randomFloorVertexPos;
            geomFloor.verticesNeedUpdate = true;
        });
    
        var matFloor = new THREE.MeshPhongMaterial({color: 
        Colors.grassGreen});
        matFloor.flatShading = true;
    
        var Floor = new THREE.Mesh(geomFloor, matFloor);
    
        Floor.position.y = -72.5;
        Floor.receiveShadow = true;
        Floor.castShadow = true;
        Floor.name = "floor";
        scene.add(Floor);
    }
    
    问题

    从下面的屏幕截图可以看出,这就是我希望地板的外观,在某些部分和某些角度,它确实按照预期工作

    但是,在地板的大面积区域中,会创建这些奇怪的黑色形状,但当您使用
    轨道控制更改相机角度时,这些形状就会消失

    我假设这是由于操纵几何体顶点的简单方法造成的,并且一些顶点可能重叠,这导致它们呈现为这样

    我需要什么

    • Main:修复黑色形状
    • 如果可以(没有必要),请解释为什么这种情况只发生在某些地方和某些角度
    • 如果我以错误的方式操纵顶点和/或有更好的方法来创建我所需要的随机低多边形地形,我将非常感谢解释正确的编码方式

    切换到
    PlaneGeometry
    应该会更容易生成地形。

    为什么不使用
    PlaneGeometry
    作为基础几何体?@Mugen87最初我没有意识到
    PlaneGeometry
    有宽度和高度段,所以我使用了
    BoxGeometry
    ,因为我知道我可以操纵它保留顶点,平面几何会更好吗?这将是一个很容易的切换。@Mugen87 Wow更改为
    PlaneGeometry
    是解决方法。。。谢谢如果你想写一个快速的答案,我会接受它,如果不是,我会回答自己以后@JJGerrish您的问题的答案是什么?@WestLangley从@Mugen87得到了答案,原因很简单,我使用的是
    BoxGeometry
    ,而不是
    PlaneGeometry
    (下面已经接受)