我正在尝试在Three.js中将网格随机化,类似于今天早些时候看到的this codepen(行星具有某种扭曲/不规则的边缘)。我尝试在我制作的codepen中重现这种效果(通过从之前链接的代码笔中公然复制一个小代码段),并更改了适合我的参数(请看第56行)。如您所见,所需的效果没有出现,并且破坏了代码。

这是行不通的部分:

var noise = randomRange(1,5);
for(var i=0; i<Ico.vertices.length; i++){
      var v = Ico.vertices[i];
      v.x += -noise/2 + Math.random()*noise;
     v.y += -noise/2 + Math.random()*noise;
     v.z += -noise/2 + Math.random()*noise;
   };


这里有什么我没有考虑的东西吗?任何帮助是极大的赞赏。

最佳答案

这是解决问题的方法:

function randomRange(min,max) {
    return Math.floor(Math.random()*(max-min+1)+min);
}

//Geometry

var geometry = new THREE.IcosahedronGeometry(25, 3);

var noise = randomRange(1,5);
for(var i=0; i<geometry.vertices.length; i++){
  var v = geometry.vertices[i];
  v.x += -noise/2 + Math.random()*noise;
  v.y += -noise/2 + Math.random()*noise;
  v.z += -noise/2 + Math.random()*noise;
};

//Meshes

var Ico = new THREE.Mesh(geometry, cyanMat);
Ico.rotation.z = 0.5;

09-19 17:46