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等。你能發現爲什麼頂點不排隊?

三江源:) 傑克

回答

0

好吧,事實證明我是路過T和L放入功能走錯了路周圍。衛生署!

:)