我正在尝试为我的项目创建随机低多边形样式的地形。我决定最好这样做的方式如下:
BoxGeometry
对象作为我的楼层,并将widthSegments
和heightSegments
设置为超过默认值(100).vertices
数组访问每个顶点forEach
geomFloor.vertices
循环遍历每个顶点
.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);
}
问题
从下面的屏幕截图中可以看出,这就是我希望地板看起来的样子,在某些部分和某些角度,它确实可以正常工作。
但是,在地板的大部分区域,会创建这些奇怪的黑色形状,但在使用OrbitControls
更改摄像机角度时会消失。
我认为这是由于用于操纵几何体顶点的简单方法,并且某些顶点可能重叠,导致它们像这样渲染。
我需要什么
答案 0 :(得分:1)
切换到PlaneGeometry
可以让您更轻松地生成地形。