private RawModel generateTerrain(Loader loader)
 {
     int count = VERTEX_COUNT * VERTEX_COUNT;
     float[] vertices = new float[count * 3];
     float[] normals = new float[count * 3];
     float[] textureCoords = new float[count * 2];
     int[] indices = new int[6 * (VERTEX_COUNT - 1) * (VERTEX_COUNT - 1)];
     int vertexPointer = 0;
     for (int i = 0; i < VERTEX_COUNT; i++)
     {
         for (int j = 0; j < VERTEX_COUNT; j++)
         {
             vertices[vertexPointer * 3] = (float)j / ((float)VERTEX_COUNT - 1) * SIZE;
             vertices[vertexPointer * 3 + 1] = 0;
             vertices[vertexPointer * 3 + 2] = (float)i / ((float)VERTEX_COUNT - 1) * SIZE;
             normals[vertexPointer * 3] = 0;
             normals[vertexPointer * 3 + 1] = 1;
             normals[vertexPointer * 3 + 2] = 0;
             textureCoords[vertexPointer * 2] = (float)j / ((float)VERTEX_COUNT - 1);
             textureCoords[vertexPointer * 2 + 1] = (float)i / ((float)VERTEX_COUNT - 1);
             vertexPointer++;
         }
     }
     int pointer = 0;
     for (int gz = 0; gz < VERTEX_COUNT - 1; gz++)
     {
         for (int gx = 0; gx < VERTEX_COUNT - 1; gx++)
         {
             int topLeft = (gz * VERTEX_COUNT) + gx;
             int topRight = topLeft + 1;
             int bottomLeft = ((gz + 1) * VERTEX_COUNT) + gx;
             int bottomRight = bottomLeft + 1;
             indices[pointer++] = topLeft;
             indices[pointer++] = bottomLeft;
             indices[pointer++] = topRight;
             indices[pointer++] = topRight;
             indices[pointer++] = bottomLeft;
             indices[pointer++] = bottomRight;
         }
     }
     return loader.loadToVao(vertices, textureCoords, normals, indices);
 }