Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- terrain= new Mesh();
- {
- // terrain->primitive_mode=GL_POINTS;
- QImage img("clouds2.png");
- if(img.width()>0)
- {
- uchar* data = new uchar[img.width()*img.height()];
- for(int i=0; i<img.width()*img.height(); i++)
- data[i] = *(img.bits() + i*4);
- int dataW = img.width();
- int dataH = img.height();
- float W = 800;
- float H = 800;
- float yScale=0.1f;
- int nverts = dataW * dataH;
- vec3* terr = new vec3[nverts];
- vec3* color = new vec3[nverts];
- float sW = W/dataW;
- float sH = H/dataH;
- for(int z=0; z<dataH; z++)
- {
- for(int x=0; x<dataW; x++)
- {
- int sh = z*dataW + x;
- terr[sh].x = x*sW - W/2.0f;
- terr[sh].z = z*sH - H/2.0f;
- terr[sh].y = data[sh]*yScale;
- float cl = data[sh]/256.0f;
- color[sh] = {std::pow(2.0*cl-0.5, 4), cl*2.0, cl*cl-0.0f};
- }
- }
- for(int i=0; i<20; i++)
- for(int z=1; z<dataH-1; z++)
- {
- for(int x=1; x<dataW-1; x++)
- {
- int sh = z*dataW + x;
- float sum = terr[sh].y + terr[sh+1].y + terr[sh-1].y + terr[sh+dataW].y + terr[sh-dataW].y;
- terr[sh].y = sum/5.0f;
- }
- }
- int nind = dataW * dataH * 6;
- uint* ind = new uint[nind];
- int i = 0;
- for(int z=0;z<dataH-1; z++)
- {
- for(int x=0; x<dataW-1; x++)
- {
- int shz = z*dataW;
- ind[i] = x + shz;
- i++;
- ind[i] = x + shz + dataW;
- i++;
- ind[i] = x + shz + 1;
- i++;
- ind[i] = x + shz + dataW;
- i++;
- ind[i] = x + shz + 1 + dataW;
- i++;
- ind[i] = x + shz + 1;
- i++;
- }
- }
- terrain->loadIndices(ind, i-1);//nind);
- terrain->setVertices(0,terr, nverts);
- terrain->setAttribute(1,color, nverts);
- delete[] data;
- delete[] terr;
- delete[] color;
- delete[] ind;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement