0
我正在使用threeJS與Simplex噪聲算法結合生成50x50平面的平鋪系統。目前,我正在通過x + y循環並添加每個飛機。然後我使用Simplex噪聲算法來計算平面的四個頂點z位置。threeJS程序平面頂點不對齊
我使用的當前的x/y爲左上頂點([0]),其餘的可以在最初生成的瓦片的功能見下文:
PerlinSimplex.noiseDetail(4,0.5);
x=0;
y=0;
while (x<32) {
while (y<32) {
l=(x*tilesize)+(tilesize/2);
t=(y*tilesize)+(tilesize/2);
//fScl= .07;
fScl= 1;
xx=x*fScl;
yy=y*fScl;
tl=Math.floor((PerlinSimplex.noise(xx,yy))*100);
bl=Math.floor((PerlinSimplex.noise(xx,yy-1))*100);
br=Math.floor((PerlinSimplex.noise(xx+1,yy-1))*100);
tr=Math.floor((PerlinSimplex.noise(xx+1,yy))*100);
addTile(t,l,tl,tr,bl,br);
y++;
}
y=0;
x++;
}
好的所以這就是在循環,那麼addTile功能:
function addTile(x,y,tl,tr,bl,br) {
var geo=new THREE.PlaneGeometry(tilesize, tilesize);
geo.dynamic = true;
geos.push(geo);
var plane = new THREE.Mesh(geo, col);
plane.overdraw = true;
plane.geometry.vertices[0].z=tl;
plane.geometry.vertices[1].z=tr;
plane.geometry.vertices[2].z=bl;
plane.geometry.vertices[3].z=br;
plane.geometry.computeFaceNormals();
plane.geometry.computeVertexNormals();
plane.geometry.__dirtyNormals = true;
plane.position.x=x;
plane.position.y=y;
plane.position.z=0;
scene.add(plane);
planes.push(plane);
plane.geometry.verticesNeedUpdate = true;
// changes to the normals
plane.geometry.normalsNeedUpdate = true;
}
(快速筆記,我意識到,我想我並不需要爲每個平面上的新幾何)
好,這裏是結果:
http://i.imgur.com/h4XNEYj.jpg
正如你所看到的,頂點不排隊。我嘗試了很多東西,但現在完全陷入困境。我很確定我有正確的頂點設置爲TL,TR等。你能發現爲什麼頂點不排隊?
三江源:) 傑克