Advertisement
Guest User

aaa

a guest
May 24th, 2016
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.53 KB | None | 0 0
  1.     terrain= new Mesh();
  2.     {
  3. //        terrain->primitive_mode=GL_POINTS;
  4.         QImage img("clouds2.png");
  5.         if(img.width()>0)
  6.         {
  7.             uchar* data = new uchar[img.width()*img.height()];
  8.             for(int i=0; i<img.width()*img.height(); i++)
  9.                 data[i] = *(img.bits() + i*4);
  10.  
  11.             int dataW = img.width();
  12.             int dataH = img.height();
  13.             float W = 800;
  14.             float H = 800;
  15.             float yScale=0.1f;
  16.             int nverts = dataW * dataH;
  17.             vec3* terr = new vec3[nverts];
  18.             vec3* color = new vec3[nverts];
  19.  
  20.             float sW = W/dataW;
  21.             float sH = H/dataH;
  22.  
  23.             for(int z=0; z<dataH; z++)
  24.             {
  25.                 for(int x=0; x<dataW; x++)
  26.                 {
  27.                     int sh = z*dataW + x;
  28.  
  29.                     terr[sh].x = x*sW - W/2.0f;
  30.                     terr[sh].z = z*sH - H/2.0f;
  31.                     terr[sh].y = data[sh]*yScale;
  32.  
  33.                     float cl = data[sh]/256.0f;
  34.                     color[sh] = {std::pow(2.0*cl-0.5, 4), cl*2.0, cl*cl-0.0f};
  35.                 }
  36.             }
  37.  
  38.  
  39.             for(int i=0; i<20; i++)
  40.             for(int z=1; z<dataH-1; z++)
  41.             {
  42.                 for(int x=1; x<dataW-1; x++)
  43.                 {
  44.                     int sh = z*dataW + x;
  45.                     float sum = terr[sh].y + terr[sh+1].y + terr[sh-1].y + terr[sh+dataW].y + terr[sh-dataW].y;
  46.                     terr[sh].y = sum/5.0f;
  47.                 }
  48.             }
  49.  
  50.             int nind = dataW * dataH * 6;
  51.             uint* ind = new uint[nind];
  52.  
  53.             int i = 0;
  54.             for(int z=0;z<dataH-1; z++)
  55.             {
  56.                 for(int x=0; x<dataW-1; x++)
  57.                 {
  58.                     int shz = z*dataW;
  59.  
  60.                     ind[i] = x + shz;
  61.                     i++;
  62.                     ind[i] = x + shz + dataW;
  63.                     i++;
  64.                     ind[i] = x + shz + 1;
  65.                     i++;
  66.  
  67.  
  68.                     ind[i] = x + shz + dataW;
  69.                     i++;
  70.                     ind[i] = x + shz + 1 + dataW;
  71.                     i++;
  72.                     ind[i] = x + shz + 1;
  73.                     i++;
  74.  
  75.  
  76.                 }
  77.             }
  78.             terrain->loadIndices(ind, i-1);//nind);
  79.             terrain->setVertices(0,terr, nverts);
  80.             terrain->setAttribute(1,color, nverts);
  81.  
  82.             delete[] data;
  83.             delete[] terr;
  84.             delete[] color;
  85.             delete[] ind;
  86.         }
  87.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement